build: Move tests/a11y to testsuite/a11y
authorBenjamin Otte <otte@redhat.com>
Wed, 15 May 2013 00:00:11 +0000 (02:00 +0200)
committerBenjamin Otte <otte@redhat.com>
Wed, 15 May 2013 13:37:16 +0000 (15:37 +0200)
155 files changed:
configure.ac
tests/Makefile.am
tests/a11y/Makefile.am [deleted file]
tests/a11y/README [deleted file]
tests/a11y/a11ychildren.test.in [deleted file]
tests/a11y/a11yderive.test.in [deleted file]
tests/a11y/a11ytests.test.in [deleted file]
tests/a11y/a11ytext.test.in [deleted file]
tests/a11y/a11ytree.test.in [deleted file]
tests/a11y/a11yutil.test.in [deleted file]
tests/a11y/a11yvalue.test.in [deleted file]
tests/a11y/about.txt [deleted file]
tests/a11y/about.ui [deleted file]
tests/a11y/accessibile-name.txt [deleted file]
tests/a11y/accessibility-dump.c [deleted file]
tests/a11y/accessible-name.txt [deleted file]
tests/a11y/accessible-name.ui [deleted file]
tests/a11y/assistant.txt [deleted file]
tests/a11y/assistant.ui [deleted file]
tests/a11y/buttons.txt [deleted file]
tests/a11y/buttons.ui [deleted file]
tests/a11y/calendar.txt [deleted file]
tests/a11y/calendar.ui [deleted file]
tests/a11y/children.c [deleted file]
tests/a11y/colorchooser.txt [deleted file]
tests/a11y/colorchooser.ui [deleted file]
tests/a11y/combos.txt [deleted file]
tests/a11y/combos.ui [deleted file]
tests/a11y/derive.c [deleted file]
tests/a11y/entries.txt [deleted file]
tests/a11y/entries.ui [deleted file]
tests/a11y/expander.txt [deleted file]
tests/a11y/expander.ui [deleted file]
tests/a11y/focus.c [deleted file]
tests/a11y/hello-world.txt [deleted file]
tests/a11y/hello-world.ui [deleted file]
tests/a11y/iconview.txt [deleted file]
tests/a11y/iconview.ui [deleted file]
tests/a11y/infobar.txt [deleted file]
tests/a11y/infobar.ui [deleted file]
tests/a11y/link.txt [deleted file]
tests/a11y/link.ui [deleted file]
tests/a11y/lockbutton.txt [deleted file]
tests/a11y/lockbutton.ui [deleted file]
tests/a11y/menu.txt [deleted file]
tests/a11y/menu.ui [deleted file]
tests/a11y/menus.txt [deleted file]
tests/a11y/menus.ui [deleted file]
tests/a11y/messagedialog.txt [deleted file]
tests/a11y/messagedialog.ui [deleted file]
tests/a11y/mnemonic.txt [deleted file]
tests/a11y/mnemonic.ui [deleted file]
tests/a11y/notebook.txt [deleted file]
tests/a11y/notebook.ui [deleted file]
tests/a11y/paned.txt [deleted file]
tests/a11y/paned.ui [deleted file]
tests/a11y/pickers.txt [deleted file]
tests/a11y/pickers.ui [deleted file]
tests/a11y/placeholder-text.txt [deleted file]
tests/a11y/placeholder-text.ui [deleted file]
tests/a11y/progress.txt [deleted file]
tests/a11y/progress.ui [deleted file]
tests/a11y/range.txt [deleted file]
tests/a11y/range.ui [deleted file]
tests/a11y/scale-drawvalue.txt [deleted file]
tests/a11y/scale-drawvalue.ui [deleted file]
tests/a11y/spinner.txt [deleted file]
tests/a11y/spinner.ui [deleted file]
tests/a11y/statusbar.txt [deleted file]
tests/a11y/statusbar.ui [deleted file]
tests/a11y/testfocus.c [deleted file]
tests/a11y/text.c [deleted file]
tests/a11y/text.txt [deleted file]
tests/a11y/text.ui [deleted file]
tests/a11y/tree-performance.c [deleted file]
tests/a11y/tree-relationships.c [deleted file]
tests/a11y/util.c [deleted file]
tests/a11y/value.c [deleted file]
testsuite/Makefile.am
testsuite/a11y/Makefile.am [new file with mode: 0644]
testsuite/a11y/README [new file with mode: 0644]
testsuite/a11y/a11ychildren.test.in [new file with mode: 0644]
testsuite/a11y/a11yderive.test.in [new file with mode: 0644]
testsuite/a11y/a11ytests.test.in [new file with mode: 0644]
testsuite/a11y/a11ytext.test.in [new file with mode: 0644]
testsuite/a11y/a11ytree.test.in [new file with mode: 0644]
testsuite/a11y/a11yutil.test.in [new file with mode: 0644]
testsuite/a11y/a11yvalue.test.in [new file with mode: 0644]
testsuite/a11y/about.txt [new file with mode: 0644]
testsuite/a11y/about.ui [new file with mode: 0644]
testsuite/a11y/accessibile-name.txt [new file with mode: 0644]
testsuite/a11y/accessibility-dump.c [new file with mode: 0644]
testsuite/a11y/accessible-name.txt [new file with mode: 0644]
testsuite/a11y/accessible-name.ui [new file with mode: 0644]
testsuite/a11y/assistant.txt [new file with mode: 0644]
testsuite/a11y/assistant.ui [new file with mode: 0644]
testsuite/a11y/buttons.txt [new file with mode: 0644]
testsuite/a11y/buttons.ui [new file with mode: 0644]
testsuite/a11y/calendar.txt [new file with mode: 0644]
testsuite/a11y/calendar.ui [new file with mode: 0644]
testsuite/a11y/children.c [new file with mode: 0644]
testsuite/a11y/colorchooser.txt [new file with mode: 0644]
testsuite/a11y/colorchooser.ui [new file with mode: 0644]
testsuite/a11y/combos.txt [new file with mode: 0644]
testsuite/a11y/combos.ui [new file with mode: 0644]
testsuite/a11y/derive.c [new file with mode: 0644]
testsuite/a11y/entries.txt [new file with mode: 0644]
testsuite/a11y/entries.ui [new file with mode: 0644]
testsuite/a11y/expander.txt [new file with mode: 0644]
testsuite/a11y/expander.ui [new file with mode: 0644]
testsuite/a11y/focus.c [new file with mode: 0644]
testsuite/a11y/hello-world.txt [new file with mode: 0644]
testsuite/a11y/hello-world.ui [new file with mode: 0644]
testsuite/a11y/iconview.txt [new file with mode: 0644]
testsuite/a11y/iconview.ui [new file with mode: 0644]
testsuite/a11y/infobar.txt [new file with mode: 0644]
testsuite/a11y/infobar.ui [new file with mode: 0644]
testsuite/a11y/link.txt [new file with mode: 0644]
testsuite/a11y/link.ui [new file with mode: 0644]
testsuite/a11y/lockbutton.txt [new file with mode: 0644]
testsuite/a11y/lockbutton.ui [new file with mode: 0644]
testsuite/a11y/menu.txt [new file with mode: 0644]
testsuite/a11y/menu.ui [new file with mode: 0644]
testsuite/a11y/menus.txt [new file with mode: 0644]
testsuite/a11y/menus.ui [new file with mode: 0644]
testsuite/a11y/messagedialog.txt [new file with mode: 0644]
testsuite/a11y/messagedialog.ui [new file with mode: 0644]
testsuite/a11y/mnemonic.txt [new file with mode: 0644]
testsuite/a11y/mnemonic.ui [new file with mode: 0644]
testsuite/a11y/notebook.txt [new file with mode: 0644]
testsuite/a11y/notebook.ui [new file with mode: 0644]
testsuite/a11y/paned.txt [new file with mode: 0644]
testsuite/a11y/paned.ui [new file with mode: 0644]
testsuite/a11y/pickers.txt [new file with mode: 0644]
testsuite/a11y/pickers.ui [new file with mode: 0644]
testsuite/a11y/placeholder-text.txt [new file with mode: 0644]
testsuite/a11y/placeholder-text.ui [new file with mode: 0644]
testsuite/a11y/progress.txt [new file with mode: 0644]
testsuite/a11y/progress.ui [new file with mode: 0644]
testsuite/a11y/range.txt [new file with mode: 0644]
testsuite/a11y/range.ui [new file with mode: 0644]
testsuite/a11y/scale-drawvalue.txt [new file with mode: 0644]
testsuite/a11y/scale-drawvalue.ui [new file with mode: 0644]
testsuite/a11y/spinner.txt [new file with mode: 0644]
testsuite/a11y/spinner.ui [new file with mode: 0644]
testsuite/a11y/statusbar.txt [new file with mode: 0644]
testsuite/a11y/statusbar.ui [new file with mode: 0644]
testsuite/a11y/testfocus.c [new file with mode: 0644]
testsuite/a11y/text.c [new file with mode: 0644]
testsuite/a11y/text.txt [new file with mode: 0644]
testsuite/a11y/text.ui [new file with mode: 0644]
testsuite/a11y/tree-performance.c [new file with mode: 0644]
testsuite/a11y/tree-relationships.c [new file with mode: 0644]
testsuite/a11y/util.c [new file with mode: 0644]
testsuite/a11y/value.c [new file with mode: 0644]

index 7a0fbbf7ea6158cd7201e8667f6fb2c5ce4cc7aa..b21180f429251ec105c051b2417ecb6e549aa4bb 100644 (file)
@@ -1780,12 +1780,12 @@ demos/pixbuf-demo/Makefile
 demos/widget-factory/Makefile
 examples/Makefile
 tests/Makefile
-tests/a11y/Makefile
 tests/css/Makefile
 tests/css/parser/Makefile
 tests/reftests/Makefile
 tests/visuals/Makefile
 testsuite/Makefile
+testsuite/a11y/Makefile
 testsuite/gdk/Makefile
 testsuite/gtk/Makefile
 docs/Makefile
index ff170b7535810e20c0d0a01298bb3d41e21c04bf..d8c6faf0c82a7099e016b6a7284bee13324fe95c 100644 (file)
@@ -1,7 +1,7 @@
 ## Makefile.am for gtk+/tests
 include $(top_srcdir)/Makefile.decl
 
-SUBDIRS = css reftests a11y visuals
+SUBDIRS = css reftests visuals
 
 AM_CPPFLAGS =                          \
        -I$(top_srcdir)                 \
diff --git a/tests/a11y/Makefile.am b/tests/a11y/Makefile.am
deleted file mode 100644 (file)
index 47b9a96..0000000
+++ /dev/null
@@ -1,110 +0,0 @@
-include $(top_srcdir)/Makefile.decl
-NULL =
-
-check_PROGRAMS = $(TEST_PROGS)
-
-AM_CPPFLAGS =                          \
-       -I$(top_srcdir)                 \
-       -I$(top_builddir)/gdk           \
-       -I$(top_srcdir)/gdk             \
-       -DGDK_DISABLE_DEPRECATED        \
-       -DGTK_DISABLE_DEPRECATED        \
-       -DGTK_VERSION=\"$(GTK_VERSION)\"\
-       $(GTK_DEBUG_FLAGS)              \
-       $(GTK_DEP_CFLAGS)
-
-LDADD = \
-       $(top_builddir)/gdk/libgdk-3.la \
-       $(top_builddir)/gtk/libgtk-3.la \
-       $(GTK_DEP_LIBS)
-
-# work around random file systems showing up in the file chooser,
-# breaking the 'pickers' test
-TESTS_ENVIRONMENT = GIO_USE_VOLUME_MONITOR=unix
-
-TEST_PROGS += accessibility-dump
-
-TEST_PROGS += tree-performance
-
-TEST_PROGS += text
-
-TEST_PROGS += children
-
-TEST_PROGS += derive
-
-TEST_PROGS += value
-
-# the focus test has no chance of working until
-# all the idle handlers in gail are gone
-#
-# TEST_PROGS += focus
-
-TEST_PROGS += tree-relationships
-
-TEST_PROGS += util
-
-noinst_PROGS = testfocus
-
-testdata = \
-       hello-world.ui hello-world.txt \
-       mnemonic.ui mnemonic.txt \
-       accessible-name.ui accessible-name.txt \
-       notebook.ui notebook.txt \
-       range.ui range.txt \
-       link.ui link.txt \
-       text.ui text.txt \
-       buttons.ui buttons.txt \
-       colorchooser.ui colorchooser.txt \
-       about.ui about.txt \
-       messagedialog.ui messagedialog.txt \
-       expander.ui expander.txt \
-       assistant.ui assistant.txt \
-       pickers.ui pickers.txt \
-       lockbutton.ui lockbutton.txt \
-       spinner.ui spinner.txt \
-       progress.ui progress.txt \
-       infobar.ui infobar.txt \
-       calendar.ui calendar.txt \
-       statusbar.ui statusbar.txt \
-       paned.ui paned.txt \
-       iconview.ui iconview.txt \
-       entries.ui entries.txt \
-       scale-drawvalue.ui scale-drawvalue.txt \
-       placeholder-text.ui placeholder-text.txt \
-       menu.ui menu.txt \
-       combos.ui combos.txt \
-       $(NULL)
-
-if BUILDOPT_INSTALL_TESTS
-insttestdir=$(pkglibexecdir)/installed-tests
-insttest_PROGRAMS = $(TEST_PROGS)
-
-a11ytestdir = $(insttestdir)/a11ytests
-a11ytest_DATA = $(testdata)
-
-substitutions = \
-       -e s,@pkglibexecdir\@,$(pkglibexecdir),g \
-       $(NULL)
-
-test_in_files = \
-       a11ytests.test.in \
-       a11ychildren.test.in \
-       a11ytree.test.in \
-       a11yvalue.test.in \
-       a11yderive.test.in \
-       a11ytext.test.in \
-       a11yutil.test.in \
-       $(NULL)
-
-test_files = $(test_in_files:.test.in=.test)
-
-$(test_files): %.test: %.test.in
-       $(AM_V_GEN) sed $(substitutions) $< > $@.tmp && mv $@.tmp $@
-
-EXTRA_DIST += $(test_in_files)
-
-testmetadir = $(datadir)/installed-tests/$(PACKAGE)
-testmeta_DATA = $(test_files)
-endif
-
--include $(top_srcdir)/git.mk
diff --git a/tests/a11y/README b/tests/a11y/README
deleted file mode 100644 (file)
index 434b0d7..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-accessibility-dump is a test runner that can do tests of static
-accessibility information. Run it like this:
-
-./accessibility-dump [OPTIONS] TESTFILE [TESTFILES...]
-
-where TESTFILE is a GtkBuilder .ui file. accessibility-dump creates
-a textual dump of the accessibility information for the created
-widget hierarchy and compares it to a preexisting .txt file.
-
-To create an initial dump, you can use the --generate option with
-a single .ui file. You should carefully inspect the output before
-blessing it as the official .txt to compare against.
-
-To find out details about a failure, you can use the --verbose
-option to see differences between expected and actual output.
-
-When run without any arguments, all the .ui files in the current
-directory are tested.
diff --git a/tests/a11y/a11ychildren.test.in b/tests/a11y/a11ychildren.test.in
deleted file mode 100644 (file)
index 927cfe3..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-[Test]
-Exec=/bin/sh -c "@pkglibexecdir@/installed-tests/children"
-Type=session
-
diff --git a/tests/a11y/a11yderive.test.in b/tests/a11y/a11yderive.test.in
deleted file mode 100644 (file)
index 665b2e9..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-[Test]
-Exec=/bin/sh -c "@pkglibexecdir@/installed-tests/derive"
-Type=session
-
diff --git a/tests/a11y/a11ytests.test.in b/tests/a11y/a11ytests.test.in
deleted file mode 100644 (file)
index e794dcf..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-[Test]
-Exec=/bin/sh -c "@pkglibexecdir@/installed-tests/accessibility-dump --directory @pkglibexecdir@/installed-tests/a11ytests"
-Type=session
-
diff --git a/tests/a11y/a11ytext.test.in b/tests/a11y/a11ytext.test.in
deleted file mode 100644 (file)
index c3435ed..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-[Test]
-Exec=/bin/sh -c "@pkglibexecdir@/installed-tests/text"
-Type=session
-
diff --git a/tests/a11y/a11ytree.test.in b/tests/a11y/a11ytree.test.in
deleted file mode 100644 (file)
index 390d1a5..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-[Test]
-Exec=/bin/sh -c "@pkglibexecdir@/installed-tests/tree-relationships"
-Type=session
-
diff --git a/tests/a11y/a11yutil.test.in b/tests/a11y/a11yutil.test.in
deleted file mode 100644 (file)
index 9140b9f..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-[Test]
-Exec=/bin/sh -c "@pkglibexecdir@/installed-tests/util"
-Type=session
-
diff --git a/tests/a11y/a11yvalue.test.in b/tests/a11y/a11yvalue.test.in
deleted file mode 100644 (file)
index ddc16e2..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-[Test]
-Exec=/bin/sh -c "@pkglibexecdir@/installed-tests/value"
-Type=session
-
diff --git a/tests/a11y/about.txt b/tests/a11y/about.txt
deleted file mode 100644 (file)
index d0fb340..0000000
+++ /dev/null
@@ -1,531 +0,0 @@
-window1
-  "dialog"
-  index: 0
-  name: About FancyPants
-  state: enabled sensitive showing visible
-  toolkit: gtk
-  <AtkComponent>
-  layer: window
-  alpha: 1
-  dialog-vbox1
-    "filler"
-    parent: window1
-    index: 0
-    state: enabled sensitive showing vertical visible
-    toolkit: gtk
-    <AtkComponent>
-    layer: widget
-    alpha: 1
-    box
-      "filler"
-      parent: dialog-vbox1
-      index: 0
-      state: enabled sensitive showing vertical visible
-      toolkit: gtk
-      <AtkComponent>
-      layer: widget
-      alpha: 1
-      logo_image
-        "icon"
-        parent: box
-        index: 0
-        state: enabled sensitive showing visible
-        toolkit: gtk
-        <AtkComponent>
-        layer: widget
-        alpha: 1
-        <AtkImage>
-        image size: 20 x 20
-        image description: (null)
-      name_label
-        "label"
-        parent: box
-        index: 1
-        name: FancyPants
-        state: enabled focusable multi-line sensitive showing visible
-        toolkit: gtk
-        <AtkComponent>
-        layer: widget
-        alpha: 1
-        <AtkText>
-        text: FancyPants
-        character count: 10
-        caret offset: 0
-        default attributes: bg-color: <omitted>
-                            bg-full-height: 0
-                            direction: <omitted>
-                            editable: false
-                            family-name: <omitted>
-                            fg-color: <omitted>
-                            indent: 0
-                            invisible: false
-                            justification: center
-                            language: <omitted>
-                            left-margin: 0
-                            pixels-above-lines: 0
-                            pixels-below-lines: 0
-                            pixels-inside-wrap: 0
-                            right-margin: 0
-                            rise: 0
-                            scale: 1
-                            size: <omitted>
-                            stretch: <omitted>
-                            strikethrough: false
-                            style: <omitted>
-                            underline: none
-                            variant: <omitted>
-                            weight: <omitted>
-                            wrap-mode: word
-      notebook
-        "page tab list"
-        parent: box
-        index: 2
-        state: enabled sensitive showing visible
-        toolkit: gtk
-        <AtkComponent>
-        layer: widget
-        alpha: 1
-        <AtkSelection>
-        selected children: unnamed-GtkNotebookPageAccessible-0
-        unnamed-GtkNotebookPageAccessible-0
-          "page tab"
-          parent: notebook
-          index: 0
-          state: enabled selectable selected showing visible
-          <AtkComponent>
-          layer: widget
-          alpha: 1
-          page_vbox
-            "filler"
-            index: 0
-            state: enabled sensitive showing vertical visible
-            toolkit: gtk
-            <AtkComponent>
-            layer: widget
-            alpha: 1
-            version_label
-              "label"
-              parent: page_vbox
-              index: 0
-              name: 0.99
-              state: enabled focusable multi-line sensitive showing visible
-              toolkit: gtk
-              <AtkComponent>
-              layer: widget
-              alpha: 1
-              <AtkText>
-              text: 0.99
-              character count: 4
-              caret offset: 0
-              default attributes: bg-color: <omitted>
-                                  bg-full-height: 0
-                                  direction: <omitted>
-                                  editable: false
-                                  family-name: <omitted>
-                                  fg-color: <omitted>
-                                  indent: 0
-                                  invisible: false
-                                  justification: center
-                                  language: <omitted>
-                                  left-margin: 0
-                                  pixels-above-lines: 0
-                                  pixels-below-lines: 0
-                                  pixels-inside-wrap: 0
-                                  right-margin: 0
-                                  rise: 0
-                                  scale: 1
-                                  size: <omitted>
-                                  stretch: <omitted>
-                                  strikethrough: false
-                                  style: <omitted>
-                                  underline: none
-                                  variant: <omitted>
-                                  weight: <omitted>
-                                  wrap-mode: word
-            comments_label
-              "label"
-              parent: page_vbox
-              index: 1
-              name: comments
-              state: enabled focusable multi-line sensitive showing visible
-              toolkit: gtk
-              <AtkComponent>
-              layer: widget
-              alpha: 1
-              <AtkText>
-              text: comments
-              character count: 8
-              caret offset: 0
-              default attributes: bg-color: <omitted>
-                                  bg-full-height: 0
-                                  direction: <omitted>
-                                  editable: false
-                                  family-name: <omitted>
-                                  fg-color: <omitted>
-                                  indent: 0
-                                  invisible: false
-                                  justification: center
-                                  language: <omitted>
-                                  left-margin: 0
-                                  pixels-above-lines: 0
-                                  pixels-below-lines: 0
-                                  pixels-inside-wrap: 0
-                                  right-margin: 0
-                                  rise: 0
-                                  scale: 1
-                                  size: <omitted>
-                                  stretch: <omitted>
-                                  strikethrough: false
-                                  style: <omitted>
-                                  underline: none
-                                  variant: <omitted>
-                                  weight: <omitted>
-                                  wrap-mode: word
-            hbox
-              "filler"
-              parent: page_vbox
-              index: 2
-              state: enabled horizontal sensitive showing visible
-              toolkit: gtk
-              <AtkComponent>
-              layer: widget
-              alpha: 1
-              website_label
-                "label"
-                parent: hbox
-                index: 0
-                name: Website
-                state: enabled focusable multi-line sensitive showing visible
-                toolkit: gtk
-                <AtkComponent>
-                layer: widget
-                alpha: 1
-                <AtkText>
-                text: Website
-                character count: 7
-                caret offset: 0
-                default attributes: bg-color: <omitted>
-                                    bg-full-height: 0
-                                    direction: <omitted>
-                                    editable: false
-                                    family-name: <omitted>
-                                    fg-color: <omitted>
-                                    indent: 0
-                                    invisible: false
-                                    justification: left
-                                    language: <omitted>
-                                    left-margin: 0
-                                    pixels-above-lines: 0
-                                    pixels-below-lines: 0
-                                    pixels-inside-wrap: 0
-                                    right-margin: 0
-                                    rise: 0
-                                    scale: 1
-                                    size: <omitted>
-                                    stretch: <omitted>
-                                    strikethrough: false
-                                    style: <omitted>
-                                    underline: none
-                                    variant: <omitted>
-                                    weight: <omitted>
-                                    wrap-mode: word
-            copyright_label
-              "label"
-              parent: page_vbox
-              index: 3
-              name: no comments
-              state: enabled focusable multi-line sensitive showing visible
-              toolkit: gtk
-              <AtkComponent>
-              layer: widget
-              alpha: 1
-              <AtkText>
-              text: no comments
-              character count: 11
-              caret offset: 0
-              default attributes: bg-color: <omitted>
-                                  bg-full-height: 0
-                                  direction: <omitted>
-                                  editable: false
-                                  family-name: <omitted>
-                                  fg-color: <omitted>
-                                  indent: 0
-                                  invisible: false
-                                  justification: center
-                                  language: <omitted>
-                                  left-margin: 0
-                                  pixels-above-lines: 0
-                                  pixels-below-lines: 0
-                                  pixels-inside-wrap: 0
-                                  right-margin: 0
-                                  rise: 0
-                                  scale: 1
-                                  size: <omitted>
-                                  stretch: <omitted>
-                                  strikethrough: false
-                                  style: <omitted>
-                                  underline: none
-                                  variant: <omitted>
-                                  weight: <omitted>
-                                  wrap-mode: word
-            license_label
-              "label"
-              parent: page_vbox
-              index: 4
-              name: This program comes with ABSOLUTELY NO WARRANTY;
-for details, visit http://www.gnu.org/licenses/gpl.html
-              state: enabled focusable multi-line sensitive showing visible
-              toolkit: gtk
-              <AtkComponent>
-              layer: widget
-              alpha: 1
-              <AtkText>
-              text: This program comes with ABSOLUTELY NO WARRANTY;
-for details, visit http://www.gnu.org/licenses/gpl.html
-              character count: 103
-              caret offset: 67
-              default attributes: bg-color: <omitted>
-                                  bg-full-height: 0
-                                  direction: <omitted>
-                                  editable: false
-                                  family-name: <omitted>
-                                  fg-color: <omitted>
-                                  indent: 0
-                                  invisible: false
-                                  justification: center
-                                  language: <omitted>
-                                  left-margin: 0
-                                  pixels-above-lines: 0
-                                  pixels-below-lines: 0
-                                  pixels-inside-wrap: 0
-                                  right-margin: 0
-                                  rise: 0
-                                  scale: 1
-                                  size: <omitted>
-                                  stretch: <omitted>
-                                  strikethrough: false
-                                  style: <omitted>
-                                  underline: none
-                                  variant: <omitted>
-                                  weight: <omitted>
-                                  wrap-mode: word
-        unnamed-GtkNotebookPageAccessible-1
-          "page tab"
-          parent: notebook
-          index: 1
-          state: enabled selectable visible
-          <AtkComponent>
-          layer: widget
-          alpha: 1
-          credits_page
-            "filler"
-            index: 0
-            state: enabled sensitive vertical visible
-            toolkit: gtk
-            <AtkComponent>
-            layer: widget
-            alpha: 1
-            scrolledwindow1
-              "scroll pane"
-              parent: credits_page
-              index: 0
-              state: enabled focusable sensitive visible
-              toolkit: gtk
-              <AtkComponent>
-              layer: widget
-              alpha: 1
-              viewport1
-                "viewport"
-                parent: scrolledwindow1
-                index: 0
-                state: enabled sensitive visible
-                toolkit: gtk
-                <AtkComponent>
-                layer: widget
-                alpha: 1
-                credits_grid
-                  "panel"
-                  parent: viewport1
-                  index: 0
-                  state: enabled sensitive vertical visible
-                  toolkit: gtk
-                  <AtkComponent>
-                  layer: widget
-                  alpha: 1
-              unnamed-GtkRangeAccessible-2
-                "scroll bar"
-                parent: scrolledwindow1
-                state: enabled horizontal sensitive visible
-                toolkit: gtk
-                <AtkComponent>
-                layer: widget
-                alpha: 1
-                <AtkValue>
-                minimum value: 0.000000
-                maximum value: 0.000000
-                current value: 0.000000
-                minimum increment: 39.800000
-              unnamed-GtkRangeAccessible-3
-                "scroll bar"
-                parent: scrolledwindow1
-                state: enabled sensitive vertical visible
-                toolkit: gtk
-                <AtkComponent>
-                layer: widget
-                alpha: 1
-                <AtkValue>
-                minimum value: 0.000000
-                maximum value: 0.000000
-                current value: 0.000000
-                minimum increment: 14.400000
-        unnamed-GtkNotebookPageAccessible-4
-          "page tab"
-          parent: notebook
-          index: 2
-          state: enabled selectable visible
-          <AtkComponent>
-          layer: widget
-          alpha: 1
-          license_page
-            "filler"
-            index: 0
-            state: enabled sensitive vertical visible
-            toolkit: gtk
-            <AtkComponent>
-            layer: widget
-            alpha: 1
-            scrolledwindow2
-              "scroll pane"
-              parent: license_page
-              index: 0
-              state: enabled focusable sensitive visible
-              toolkit: gtk
-              <AtkComponent>
-              layer: widget
-              alpha: 1
-              license_view
-                "text"
-                parent: scrolledwindow2
-                index: 0
-                state: enabled focusable multi-line sensitive visible
-                toolkit: gtk
-                <AtkComponent>
-                layer: widget
-                alpha: 1
-                <AtkText>
-                text: 
-                character count: 0
-                caret offset: 0
-                default attributes: bg-color: <omitted>
-                                    bg-full-height: false
-                                    direction: <omitted>
-                                    editable: false
-                                    family-name: <omitted>
-                                    fg-color: <omitted>
-                                    indent: 0
-                                    invisible: false
-                                    justification: left
-                                    language: <omitted>
-                                    left-margin: 8
-                                    pixels-above-lines: 0
-                                    pixels-below-lines: 0
-                                    pixels-inside-wrap: 0
-                                    right-margin: 8
-                                    rise: 0
-                                    scale: 1
-                                    size: <omitted>
-                                    stretch: <omitted>
-                                    strikethrough: false
-                                    style: <omitted>
-                                    underline: none
-                                    variant: <omitted>
-                                    weight: <omitted>
-                                    wrap-mode: none
-                <AtkStreamableContent>
-                mime types: application/x-gtk-text-buffer-rich-text text/plain
-              unnamed-GtkRangeAccessible-5
-                "scroll bar"
-                parent: scrolledwindow2
-                state: enabled horizontal sensitive visible
-                toolkit: gtk
-                <AtkComponent>
-                layer: widget
-                alpha: 1
-                <AtkValue>
-                minimum value: 0.000000
-                maximum value: 0.000000
-                current value: 0.000000
-                minimum increment: 39.800000
-              unnamed-GtkRangeAccessible-6
-                "scroll bar"
-                parent: scrolledwindow2
-                state: enabled sensitive vertical visible
-                toolkit: gtk
-                <AtkComponent>
-                layer: widget
-                alpha: 1
-                <AtkValue>
-                minimum value: 0.000000
-                maximum value: 0.000000
-                current value: 0.000000
-                minimum increment: 14.400000
-    dialog-action_area1
-      "filler"
-      parent: dialog-vbox1
-      index: 1
-      state: enabled horizontal sensitive showing visible
-      toolkit: gtk
-      <AtkComponent>
-      layer: widget
-      alpha: 1
-      close_button
-        "push button"
-        parent: dialog-action_area1
-        index: 0
-        name: Close
-        state: enabled focusable sensitive showing visible default
-        toolkit: gtk
-        <AtkComponent>
-        layer: widget
-        alpha: 1
-        <AtkImage>
-        image size: 20 x 20
-        image description: (null)
-        <AtkAction>
-        action 0 name: click
-        action 0 description: Clicks the button
-        action 0 keybinding: <Alt>c
-      license_button
-        "toggle button"
-        parent: dialog-action_area1
-        index: 1
-        name: License
-        state: enabled focusable sensitive
-        toolkit: gtk
-        <AtkComponent>
-        layer: widget
-        alpha: 1
-        <AtkImage>
-        image size: -1 x -1
-        image description: (null)
-        <AtkAction>
-        action 0 name: click
-        action 0 description: Clicks the button
-        action 0 keybinding: <Alt>l
-      credits_button
-        "toggle button"
-        parent: dialog-action_area1
-        index: 2
-        name: Credits
-        state: enabled focusable sensitive
-        toolkit: gtk
-        <AtkComponent>
-        layer: widget
-        alpha: 1
-        <AtkImage>
-        image size: 20 x 20
-        image description: (null)
-        <AtkAction>
-        action 0 name: click
-        action 0 description: Clicks the button
-        action 0 keybinding: <Alt>r
diff --git a/tests/a11y/about.ui b/tests/a11y/about.ui
deleted file mode 100644 (file)
index baf99f3..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-
-<interface>
-  <!-- interface-requires gtk+ 3.0 -->
-  <object class="GtkAboutDialog" id="window1">
-    <property name="program-name">FancyPants</property>
-    <property name="version">0.99</property>
-    <property name="copyright">no comments</property>
-    <property name="comments">comments</property>
-    <property name="license-type">gpl-3-0</property>
-    <property name="website">http://www.gtk.org</property>
-  </object>
-</interface>
diff --git a/tests/a11y/accessibile-name.txt b/tests/a11y/accessibile-name.txt
deleted file mode 100644 (file)
index 27d9076..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-window1
-  "window"
-  index: 0
-  state: enabled resizable sensitive showing visible
-  toolkit: gail
-  button1
-    "push button"
-    parent: window1
-    index: 0
-    name: Accessible name
-    state: enabled focusable sensitive showing visible
-    toolkit: gail
-    text: Hello World!
-    character count: 12
-    caret offset: 0
-    default attributes: left-margin: 0
-                        right-margin: 0
-                        indent: 0
-                        invisible: false
-                        editable: false
-                        pixels-above-lines: 0
-                        pixels-below-lines: 0
-                        pixels-inside-wrap: 0
-                        bg-full-height: 0
-                        scale: 1
-                        rise: 0
-                        underline: none
-                        strikethrough: false
-                        bg-stipple: false
-                        fg-stipple: false
-                        fg-color: <omitted>
-                        bg-color: <omitted>
-                        wrap-mode: word
-                        justification: left
-                        size: <omitted>
-                        weight: <omitted>
-                        family-name: <omitted>
-                        stretch: <omitted>
-                        variant: <omitted>
-                        style: <omitted>
-                        language: <omitted>
-                        direction: <omitted>
-    image size: -1 x -1
-    image description: (null)
diff --git a/tests/a11y/accessibility-dump.c b/tests/a11y/accessibility-dump.c
deleted file mode 100644 (file)
index 62541a1..0000000
+++ /dev/null
@@ -1,901 +0,0 @@
-/*
- * Copyright (C) 2011 Red Hat Inc.
- *
- * Author:
- *      Benjamin Otte <otte@redhat.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "config.h"
-
-#include <string.h>
-#include <glib/gstdio.h>
-#include <gtk/gtk.h>
-
-#define DEPTH_INCREMENT 2
-
-static char *
-get_test_file (const char *test_file,
-               const char *extension,
-               gboolean    must_exist)
-{
-  GString *file = g_string_new (NULL);
-
-  if (g_str_has_suffix (test_file, ".ui"))
-    g_string_append_len (file, test_file, strlen (test_file) - strlen (".ui"));
-  else
-    g_string_append (file, test_file);
-  
-  g_string_append (file, extension);
-
-  if (must_exist &&
-      !g_file_test (file->str, G_FILE_TEST_EXISTS))
-    {
-      g_string_free (file, TRUE);
-      return NULL;
-    }
-
-  return g_string_free (file, FALSE);
-}
-
-static char *
-diff_with_file (const char  *file1,
-                char        *text,
-                gssize       len,
-                GError     **error)
-{
-  const char *command[] = { "diff", "-u", file1, NULL, NULL };
-  char *diff, *tmpfile;
-  int fd;
-
-  diff = NULL;
-
-  if (len < 0)
-    len = strlen (text);
-  
-  /* write the text buffer to a temporary file */
-  fd = g_file_open_tmp (NULL, &tmpfile, error);
-  if (fd < 0)
-    return NULL;
-
-  if (write (fd, text, len) != (int) len)
-    {
-      close (fd);
-      g_set_error (error,
-                   G_FILE_ERROR, G_FILE_ERROR_FAILED,
-                   "Could not write data to temporary file '%s'", tmpfile);
-      goto done;
-    }
-  close (fd);
-  command[3] = tmpfile;
-
-  /* run diff command */
-  g_spawn_sync (NULL,
-                (char **) command,
-                NULL,
-                G_SPAWN_SEARCH_PATH,
-                NULL, NULL,
-               &diff,
-                NULL, NULL,
-                error);
-
-done:
-  g_unlink (tmpfile);
-  g_free (tmpfile);
-
-  return diff;
-}
-
-static int unnamed_object_count;
-
-static void
-setup_test (void)
-{
-  unnamed_object_count = 0;
-}
-
-static const char *
-get_name (AtkObject *accessible)
-{
-  char *name;
-
-  name = g_object_get_data (G_OBJECT (accessible), "gtk-accessibility-dump-name");
-  if (name)
-    return name;
-
-  if (GTK_IS_ACCESSIBLE (accessible))
-    {
-      GtkWidget *widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (accessible));
-
-      name = g_strdup (gtk_buildable_get_name (GTK_BUILDABLE (widget)));
-    }
-
-  if (name == NULL && ATK_IS_TEXT (accessible))
-    {
-      name = atk_text_get_text (ATK_TEXT (accessible), 0, -1);
-    }
-
-  if (name == NULL)
-    {
-      /* Generate a unique, repeatable name */
-      name = g_strdup_printf ("unnamed-%s-%d", G_OBJECT_TYPE_NAME (accessible), unnamed_object_count++);
-    }
-
-  g_object_set_data_full (G_OBJECT (accessible), "gtk-accessibility-dump-name", name, g_free);
-  return name;
-}
-
-static void
-dump_relation (GString     *string,
-               guint        depth,
-               AtkRelation *relation)
-{
-  GPtrArray *targets;
-  const char *name;
-  guint i;
-
-  targets = atk_relation_get_target (relation);
-  if (targets == NULL || targets->len == 0)
-    return;
-
-  name = atk_relation_type_get_name (atk_relation_get_relation_type (relation));
-  g_string_append_printf (string, "%*s%s: %s\n", depth, "", name, get_name (g_ptr_array_index (targets, 0)));
-  depth += strlen (name) + 2;
-
-  for (i = 1; i < targets->len; i++)
-    {
-      g_string_append_printf (string, "%*s%s\n", depth, "", get_name (g_ptr_array_index (targets, i)));
-    }
-}
-
-static void
-dump_relation_set (GString        *string,
-                   guint           depth,
-                   AtkRelationSet *set)
-{
-  guint i;
-
-  if (set == NULL)
-    return;
-
-  for (i = 0; i < atk_relation_set_get_n_relations (set); i++)
-    {
-      AtkRelation *relation;
-      
-      relation = atk_relation_set_get_relation (set, i);
-
-      dump_relation (string, depth, relation);
-    }
-
-  g_object_unref (set);
-}
-
-static void
-dump_state_set (GString     *string,
-                guint        depth,
-                AtkStateSet *set)
-{
-  guint i;
-
-  if (set == NULL)
-    return;
-
-  if (!atk_state_set_is_empty (set))
-    {
-      g_string_append_printf (string, "%*sstate:", depth, "");
-      for (i = 0; i < ATK_STATE_LAST_DEFINED; i++)
-        {
-          if (atk_state_set_contains_state (set, i))
-            g_string_append_printf (string, " %s", atk_state_type_get_name (i));
-        }
-      g_string_append_c (string, '\n');
-    }
-
-  g_object_unref (set);
-}
-
-static void
-dump_attribute (GString      *string,
-                guint         depth,
-                AtkAttribute *attribute)
-{
-  g_string_append_printf (string, "%*s%s: %s\n", depth, "", attribute->name, attribute->value);
-}
-
-static void
-dump_attribute_set (GString         *string,
-                    guint            depth,
-                    AtkAttributeSet *set)
-{
-  GSList *l;
-  AtkAttribute *attribute;
-
-  for (l = set; l; l = l->next)
-    {
-      attribute = l->data;
-
-      dump_attribute (string, depth, attribute);
-    }
-}
-
-static gint
-compare_attr (gconstpointer a, gconstpointer b)
-{
-  const AtkAttribute *aattr = a;
-  const AtkAttribute *battr = b;
-
-  return strcmp (aattr->name, battr->name);
-}
-
-static void
-dump_text_attributes (GString         *string,
-                      gint             depth,
-                      const gchar     *name,
-                      AtkAttributeSet *attributes)
-{
-  GSList *l;
-  AtkAttribute *attr;
-  const gchar *value;
-
-  if (attributes == NULL)
-    return;
-
-  attributes = g_slist_sort (attributes, compare_attr);
-
-  for (l = attributes; l; l = l->next)
-    {
-      attr = l->data;
-      /* don't dump values that depend on the environment */
-      if (strcmp (attr->name, "family-name") == 0 ||
-          strcmp (attr->name, "size") == 0 ||
-          strcmp (attr->name, "weight") == 0 ||
-          strcmp (attr->name, "stretch") == 0 ||
-          strcmp (attr->name, "variant") == 0 ||
-          strcmp (attr->name, "style") == 0 ||
-          strcmp (attr->name, "language") == 0 ||
-          strcmp (attr->name, "fg-color") == 0 ||
-          strcmp (attr->name, "bg-color") == 0 ||
-          strcmp (attr->name, "direction") == 0)
-        value = "<omitted>";
-      else
-        value = attr->value;
-
-      if (name)
-        {
-          /* first time this loop is run */
-          g_string_append_printf (string, "%*s%s: %s: %s\n", depth, "", name, attr->name, value);
-          depth += strlen (name) + 2;
-          name = NULL;
-        }
-      else
-        {
-          /* every other time */
-          g_string_append_printf (string, "%*s%s: %s\n", depth, "", attr->name, value);
-        }
-    }
-
-  atk_attribute_set_free (attributes);
-}
-
-extern GType atk_layer_get_type (void);
-
-static const gchar *
-layer_name (AtkLayer layer)
-{
-  GEnumClass *class;
-  GEnumValue *value;
-
-  class = g_type_class_ref (atk_layer_get_type ());
-  value = g_enum_get_value (class, layer);
-  g_type_class_unref (class);
-
-  return value->value_nick;
-}
-
-static void
-dump_atk_component (AtkComponent *atk_component,
-                    guint         depth,
-                    GString      *string)
-{
-  AtkLayer layer;
-
-  g_string_append_printf (string, "%*s<AtkComponent>\n", depth, "");
-
-  layer = atk_component_get_layer (atk_component);
-  g_string_append_printf (string, "%*slayer: %s\n", depth, "", layer_name (layer));
-
-  g_string_append_printf (string, "%*salpha: %g\n", depth, "", atk_component_get_alpha (atk_component));
-}
-
-static void
-dump_atk_text (AtkText *atk_text,
-               guint    depth,
-               GString *string)
-{
-  gchar *text;
-  gint i, start, end;
-
-  g_string_append_printf (string, "%*s<AtkText>\n", depth, "");
-
-  text = atk_text_get_text (atk_text, 0, -1);
-  g_string_append_printf (string, "%*stext: %s\n", depth, "", text);
-  g_free (text);
-
-  g_string_append_printf (string, "%*scharacter count: %d\n", depth, "", atk_text_get_character_count (atk_text));
-
-  g_string_append_printf (string, "%*scaret offset: %d\n", depth, "", atk_text_get_caret_offset (atk_text));
-
-  for (i = 0; i < atk_text_get_n_selections (atk_text); i++)
-    {
-      text = atk_text_get_selection (atk_text, i, &start, &end);
-      if (text)
-        g_string_append_printf (string, "%*sselection %d: (%d, %d) %s\n", depth, "", i, start, end, text);
-      g_free (text);
-    }
-
-  dump_text_attributes (string, depth, "default attributes", atk_text_get_default_attributes (atk_text));
-}
-
-static void
-dump_atk_image (AtkImage *atk_image,
-                guint     depth,
-                GString  *string)
-{
-  gint width, height;
-
-  g_string_append_printf (string, "%*s<AtkImage>\n", depth, "");
-
-  atk_image_get_image_size (atk_image, &width, &height);
-  g_string_append_printf (string, "%*simage size: %d x %d\n", depth, "", width, height);
-
-  g_string_append_printf (string, "%*simage description: %s\n", depth, "", atk_image_get_image_description (atk_image));
-}
-
-static void
-dump_atk_action (AtkAction *atk_action,
-                 guint      depth,
-                 GString   *string)
-{
-  gint i;
-
-  g_string_append_printf (string, "%*s<AtkAction>\n", depth, "");
-
-  for (i = 0; i < atk_action_get_n_actions (atk_action); i++)
-    {
-      if (atk_action_get_name (atk_action, i))
-        g_string_append_printf (string, "%*saction %d name: %s\n", depth, "", i, atk_action_get_name (atk_action, i));
-      if (atk_action_get_description (atk_action, i))
-        g_string_append_printf (string, "%*saction %d description: %s\n", depth, "", i, atk_action_get_description (atk_action, i));
-      if (atk_action_get_keybinding (atk_action, i))
-        g_string_append_printf (string, "%*saction %d keybinding: %s\n", depth, "", i, atk_action_get_keybinding (atk_action, i));
-    }
-}
-
-static void
-dump_atk_selection (AtkSelection *atk_selection,
-                    guint         depth,
-                    GString      *string)
-{
-  guint n_selections, n_counted_selections;
-  gint i;
-
-  g_string_append_printf (string, "%*s<AtkSelection>\n", depth, "");
-
-  n_selections = atk_selection_get_selection_count (atk_selection);
-
-  n_counted_selections = 0;
-  for (i = 0; i < atk_object_get_n_accessible_children (ATK_OBJECT (atk_selection)); i++)
-    {
-      if (atk_selection_is_child_selected (atk_selection, i))
-        {
-          AtkObject *object = atk_object_ref_accessible_child (ATK_OBJECT (atk_selection), i);
-          
-          g_assert (object);
-          
-          if (n_counted_selections == 0)
-            {
-              g_string_append_printf (string, "%*sselected children: %s\n", depth, "", get_name (object));
-              depth += strlen ("selected children: ");
-            }
-          else
-            g_string_append_printf (string, "%*s%s\n", depth, "", get_name (object));
-          n_counted_selections++;
-        }
-    }
-  
-  g_assert_cmpint (n_selections, ==, n_counted_selections);
-  g_assert_cmpint (n_selections, ==, atk_selection_get_selection_count (atk_selection));
-}
-
-static void
-dump_atk_value (AtkValue *atk_value,
-                guint     depth,
-                GString  *string)
-{
-  GValue value = G_VALUE_INIT;
-  GValue svalue = G_VALUE_INIT;
-
-  g_string_append_printf (string, "%*s<AtkValue>\n", depth, "");
-
-  g_value_init (&value, G_TYPE_DOUBLE);
-  g_value_init (&svalue, G_TYPE_STRING);
-
-  atk_value_get_minimum_value (atk_value, &value);
-  if (g_value_transform (&value, &svalue))
-    g_string_append_printf (string, "%*sminimum value: %s\n", depth, "", g_value_get_string (&svalue));
-  else
-    g_string_append_printf (string, "%*sminimum value: <%s>\n", depth, "", G_VALUE_TYPE_NAME (&value));
-
-  g_value_reset (&value);
-  g_value_reset (&svalue);
-
-  atk_value_get_maximum_value (atk_value, &value);
-  if (g_value_transform (&value, &svalue))
-    g_string_append_printf (string, "%*smaximum value: %s\n", depth, "", g_value_get_string (&svalue));
-  else
-    g_string_append_printf (string, "%*smaximum value: <%s>\n", depth, "", G_VALUE_TYPE_NAME (&value));
-
-  g_value_reset (&value);
-  g_value_reset (&svalue);
-
-  atk_value_get_current_value (atk_value, &value);
-  if (g_value_transform (&value, &svalue))
-    g_string_append_printf (string, "%*scurrent value: %s\n", depth, "", g_value_get_string (&svalue));
-  else
-    g_string_append_printf (string, "%*scurrent value: %s\n", depth, "", G_VALUE_TYPE_NAME (&value));
-
-  g_value_reset (&value);
-  g_value_reset (&svalue);
-
-  atk_value_get_minimum_increment (atk_value, &value);
-  if (g_value_transform (&value, &svalue))
-    g_string_append_printf (string, "%*sminimum increment: %s\n", depth, "", g_value_get_string (&svalue));
-  else
-    g_string_append_printf (string, "%*sminimum increment: %s\n", depth, "", G_VALUE_TYPE_NAME (&value));
-
-  g_value_reset (&value);
-  g_value_reset (&svalue);
-}
-
-static void
-dump_atk_hyperlink_impl (AtkHyperlinkImpl *impl,
-                         guint             depth,
-                         GString          *string)
-{
-  AtkHyperlink *atk_link;
-  gint i;
-
-  g_string_append_printf (string, "%*s<AtkHyperlinkImpl>\n", depth, "");
-
-  atk_link = atk_hyperlink_impl_get_hyperlink (impl);
-
-  g_string_append_printf (string, "%*sanchors:", depth, "");
-
-  for (i = 0; i < atk_hyperlink_get_n_anchors (atk_link); i++)
-    {
-      gchar *uri;
-
-      uri = atk_hyperlink_get_uri (atk_link, i);
-      g_string_append_printf (string, " %s", uri);
-      g_free (uri);
-    }
-  g_string_append_c (string, '\n');
-
-  g_object_unref (atk_link);
-}
-
-static void
-dump_atk_streamable_content (AtkStreamableContent *content,
-                             guint                 depth,
-                             GString              *string)
-{
-  gint i;
-
-  g_string_append_printf (string, "%*s<AtkStreamableContent>\n", depth, "");
-
-  g_string_append_printf (string, "%*smime types:", depth, "");
-  for (i = 0; i < atk_streamable_content_get_n_mime_types (content); i++)
-    g_string_append_printf (string, " %s", atk_streamable_content_get_mime_type (content, i));
-  g_string_append_c (string, '\n');
-}
-
-static void
-dump_atk_table (AtkTable *table,
-                guint     depth,
-                GString  *string)
-{
-  gint *selected;
-  gint n_selected;
-  gint i, j;
-  AtkObject *obj;
-  const gchar *desc;
-
-  g_string_append_printf (string, "%*s<AtkTable>\n", depth, "");
-
-  obj = atk_table_get_summary (table);
-  if (obj)
-    g_string_append_printf (string, "%*ssummary: %s\n", depth, "", get_name (obj));
-
-  obj = atk_table_get_caption (table);
-  if (obj)
-    g_string_append_printf (string, "%*scaption: %s\n", depth, "", get_name (obj));
-
-  g_string_append_printf (string, "%*srows: %d\n", depth, "", atk_table_get_n_rows (table));
-  g_string_append_printf (string, "%*scolumns: %d\n", depth, "", atk_table_get_n_columns (table));
-
-  selected = NULL;
-  n_selected = atk_table_get_selected_rows (table, &selected);
-  if (n_selected > 0)
-    {
-      g_string_append_printf (string, "%*sselected rows:", depth, "");
-      for (i = 0; i < n_selected; i++)
-        g_string_append_printf (string, " %d", selected[i]);
-      g_string_append_c (string, '\n');
-    }
-  g_free (selected);
-
-  selected = NULL;
-  n_selected = atk_table_get_selected_columns (table, &selected);
-  if (n_selected > 0)
-    {
-      g_string_append_printf (string, "%*sselected columns:", depth, "");
-      for (i = 0; i < n_selected; i++)
-        g_string_append_printf (string, " %d", selected[i]);
-      g_string_append_c (string, '\n');
-    }
-  g_free (selected);
-
-  
-  for (i = 0; i < atk_table_get_n_columns (table); i++)
-    {
-      desc = atk_table_get_column_description (table, i);
-      if (desc)
-        g_string_append_printf (string, "%*scolumn %d description: %s\n", depth, "", i, desc);
-      obj = atk_table_get_column_header (table, i);
-      if (obj)
-        g_string_append_printf (string, "%*scolumn %d header: %s\n", depth, "", i, get_name (obj));
-    }
-
-  for (i = 0; i < atk_table_get_n_rows (table); i++)
-    {
-      desc = atk_table_get_row_description (table, i);
-      if (desc)
-        g_string_append_printf (string, "%*srow %d description: %s\n", depth, "", i, desc);
-      obj = atk_table_get_row_header (table, i);
-      if (obj)
-        g_string_append_printf (string, "%*srow %d header: %s\n", depth, "", i, get_name (obj));
-    }
-
-  g_string_append_printf (string, "%*stable indexes:\n", depth, "");
-  for (i = 0; i < atk_table_get_n_rows (table); i++)
-    {
-      g_string_append_printf (string, "%*s", depth + DEPTH_INCREMENT, "");
-      for (j = 0; j < atk_table_get_n_columns (table); j++)
-        {
-          int id = atk_table_get_index_at (table, i, j);
-
-          obj = atk_object_ref_accessible_child (ATK_OBJECT (table), id);
-          if (j > 0)
-            g_string_append (string, " ");
-
-          g_string_append_printf (string, "%s%s%s",
-                                  atk_table_get_row_at_index (table, id) == i ? "✓" : "⚠",
-                                  atk_table_get_column_at_index (table, id) == j ? "✓" : "⚠",
-                                  get_name (obj));
-        }
-      g_string_append (string, "\n");
-    }
-}
-
-static void
-dump_accessible (AtkObject     *accessible,
-                 guint          depth,
-                 GString       *string)
-{
-  guint i;
-
-  g_string_append_printf (string, "%*s%s\n", depth, "", get_name (accessible));
-  depth += DEPTH_INCREMENT;
-
-  g_string_append_printf (string, "%*s\"%s\"\n", depth, "", atk_role_get_name (atk_object_get_role (accessible)));
-  if (GTK_IS_ACCESSIBLE (atk_object_get_parent (accessible)))
-    g_string_append_printf (string, "%*sparent: %s\n", depth, "", get_name (atk_object_get_parent (accessible)));
-  if (atk_object_get_index_in_parent (accessible) != -1)
-    g_string_append_printf (string, "%*sindex: %d\n", depth, "", atk_object_get_index_in_parent (accessible));
-  if (atk_object_get_name (accessible))
-    g_string_append_printf (string, "%*sname: %s\n", depth, "", atk_object_get_name (accessible));
-  if (atk_object_get_description (accessible))
-    g_string_append_printf (string, "%*sdescription: %s\n", depth, "", atk_object_get_description (accessible));
-  dump_relation_set (string, depth, atk_object_ref_relation_set (accessible));
-  dump_state_set (string, depth, atk_object_ref_state_set (accessible));
-  dump_attribute_set (string, depth, atk_object_get_attributes (accessible));
-
-  if (ATK_IS_COMPONENT (accessible))
-    dump_atk_component (ATK_COMPONENT (accessible), depth, string);
-
-  if (ATK_IS_TEXT (accessible))
-    dump_atk_text (ATK_TEXT (accessible), depth, string);
-
-  if (ATK_IS_IMAGE (accessible))
-    dump_atk_image (ATK_IMAGE (accessible), depth, string);
-
-  if (ATK_IS_ACTION (accessible))
-    dump_atk_action (ATK_ACTION (accessible), depth, string);
-
-  if (ATK_IS_SELECTION (accessible))
-    dump_atk_selection (ATK_SELECTION (accessible), depth, string);
-
-  if (ATK_IS_VALUE (accessible))
-    dump_atk_value (ATK_VALUE (accessible), depth, string);
-
-  if (ATK_IS_HYPERLINK_IMPL (accessible))
-    dump_atk_hyperlink_impl (ATK_HYPERLINK_IMPL (accessible), depth, string);
-
-  if (ATK_IS_STREAMABLE_CONTENT (accessible))
-    dump_atk_streamable_content (ATK_STREAMABLE_CONTENT (accessible), depth, string);
-
-  if (ATK_IS_TABLE (accessible))
-    dump_atk_table (ATK_TABLE (accessible), depth, string);
-
-  for (i = 0; i < atk_object_get_n_accessible_children (accessible); i++)
-    {
-      AtkObject *child = atk_object_ref_accessible_child (accessible, i);
-      dump_accessible (child, depth, string);
-      g_object_unref (child);
-    }
-}
-
-static GtkWidget *
-builder_get_toplevel (GtkBuilder *builder)
-{
-  GSList *list, *walk;
-  GtkWidget *window = NULL;
-
-  list = gtk_builder_get_objects (builder);
-  for (walk = list; walk; walk = walk->next)
-    {
-      if (GTK_IS_WINDOW (walk->data) &&
-          gtk_widget_get_parent (walk->data) == NULL)
-        {
-          window = walk->data;
-          break;
-        }
-    }
-  
-  g_slist_free (list);
-
-  return window;
-}
-
-static void
-dump_ui_file (const char *ui_file,
-              GString *string)
-{
-  GtkWidget *window;
-  GtkBuilder *builder;
-  GError *error = NULL;
-
-  builder = gtk_builder_new ();
-  gtk_builder_add_from_file (builder, ui_file, &error);
-  g_assert_no_error (error);
-  window = builder_get_toplevel (builder);
-  g_object_unref (builder);
-  g_assert (window);
-
-  gtk_widget_show (window);
-
-  dump_accessible (gtk_widget_get_accessible (window), 0, string);
-  gtk_widget_destroy (window);
-}
-
-static void
-dump_to_stdout (GFile *file)
-{
-  char *ui_file;
-  GString *dump;
-
-  ui_file = g_file_get_path (file);
-  dump = g_string_new ("");
-
-  dump_ui_file (ui_file, dump);
-  g_print ("%s", dump->str);
-
-  g_string_free (dump, TRUE);
-  g_free (ui_file);
-}
-
-static void
-test_ui_file (GFile *file)
-{
-  char *ui_file, *a11y_file;
-  GString *dump;
-  GError *error = NULL;
-
-  ui_file = g_file_get_path (file);
-  a11y_file = get_test_file (ui_file, ".txt", TRUE);
-  dump = g_string_new ("");
-
-  dump_ui_file (ui_file, dump);
-
-  if (a11y_file)
-    {
-      char *diff = diff_with_file (a11y_file, dump->str, dump->len, &error);
-      g_assert_no_error (error);
-
-      if (diff && diff[0])
-        {
-          g_test_message ("Contents don't match expected contents:\n%s", diff);
-          g_test_fail ();
-          g_free (diff);
-        }
-    }
-  else if (dump->str[0])
-    {
-      g_test_message ("Expected a reference file:\n%s", dump->str);
-      g_test_fail ();
-    }
-
-  g_string_free (dump, TRUE);
-  g_free (a11y_file);
-  g_free (ui_file);
-}
-
-static void
-add_test_for_file (GFile *file)
-{
-  g_test_add_vtable (g_file_get_path (file),
-                     0,
-                     g_object_ref (file),
-                     (GTestFixtureFunc) setup_test,
-                     (GTestFixtureFunc) test_ui_file,
-                     (GTestFixtureFunc) g_object_unref);
-}
-
-static int
-compare_files (gconstpointer a, gconstpointer b)
-{
-  GFile *file1 = G_FILE (a);
-  GFile *file2 = G_FILE (b);
-  char *path1, *path2;
-  int result;
-
-  path1 = g_file_get_path (file1);
-  path2 = g_file_get_path (file2);
-
-  result = strcmp (path1, path2);
-
-  g_free (path1);
-  g_free (path2);
-
-  return result;
-}
-
-static void
-add_tests_for_files_in_directory (GFile *dir)
-{
-  GFileEnumerator *enumerator;
-  GFileInfo *info;
-  GList *files;
-  GError *error = NULL;
-
-  enumerator = g_file_enumerate_children (dir, G_FILE_ATTRIBUTE_STANDARD_NAME, 0, NULL, &error);
-  g_assert_no_error (error);
-  files = NULL;
-
-  while ((info = g_file_enumerator_next_file (enumerator, NULL, &error)))
-    {
-      const char *filename;
-
-      filename = g_file_info_get_name (info);
-
-      if (!g_str_has_suffix (filename, ".ui"))
-        {
-          g_object_unref (info);
-          continue;
-        }
-
-      files = g_list_prepend (files, g_file_get_child (dir, filename));
-
-      g_object_unref (info);
-    }
-  
-  g_assert_no_error (error);
-  g_object_unref (enumerator);
-
-  files = g_list_sort (files, compare_files);
-  g_list_foreach (files, (GFunc) add_test_for_file, NULL);
-  g_list_free_full (files, g_object_unref);
-}
-
-static char *arg_base_dir = NULL;
-
-static const GOptionEntry test_args[] = {
-  { "directory",        'd', 0, G_OPTION_ARG_FILENAME, &arg_base_dir,
-    "Directory to run tests from", "DIR" },
-  { NULL }
-};
-
-static gboolean
-parse_command_line (int *argc, char ***argv)
-{
-  GError *error = NULL;
-  GOptionContext *context;
-
-  context = g_option_context_new ("- run GTK accessibility tests");
-  g_option_context_add_main_entries (context, test_args, NULL);
-  g_option_context_set_ignore_unknown_options (context, TRUE);
-
-  if (!g_option_context_parse (context, argc, argv, &error))
-    {
-      g_print ("option parsing failed: %s\n", error->message);
-      return FALSE;
-    }
-
-  gtk_test_init (argc, argv);
-
-  return TRUE;
-}
-
-int
-main (int argc, char **argv)
-{
-  if (!parse_command_line (&argc, &argv))
-    return 1;
-
-  if (argc < 2)
-    {
-      const char *basedir;
-      GFile *dir;
-
-      if (arg_base_dir)
-        basedir = arg_base_dir;
-      else if (g_getenv ("srcdir"))
-        basedir = g_getenv ("srcdir");
-      else
-        basedir = ".";
-        
-      dir = g_file_new_for_path (basedir);
-      
-      add_tests_for_files_in_directory (dir);
-
-      g_object_unref (dir);
-    }
-  else if (argc == 3 && strcmp (argv[1], "--generate") == 0)
-    {
-      GFile *file = g_file_new_for_commandline_arg (argv[2]);
-
-      dump_to_stdout (file);
-
-      g_object_unref (file);
-
-      return 0;
-    }
-  else
-    {
-      guint i;
-
-      for (i = 1; i < argc; i++)
-        {
-          GFile *file = g_file_new_for_commandline_arg (argv[i]);
-
-          add_test_for_file (file);
-
-          g_object_unref (file);
-        }
-    }
-
-  return g_test_run ();
-}
-
diff --git a/tests/a11y/accessible-name.txt b/tests/a11y/accessible-name.txt
deleted file mode 100644 (file)
index 0fbd0aa..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-window1
-  "window"
-  index: 0
-  state: enabled resizable sensitive showing visible
-  toolkit: gtk
-  <AtkComponent>
-  layer: window
-  alpha: 1
-  button1
-    "push button"
-    parent: window1
-    index: 0
-    name: Accessible name
-    state: enabled focusable sensitive showing visible
-    toolkit: gtk
-    <AtkComponent>
-    layer: widget
-    alpha: 1
-    <AtkImage>
-    image size: -1 x -1
-    image description: (null)
-    <AtkAction>
-    action 0 name: click
-    action 0 description: Clicks the button
diff --git a/tests/a11y/accessible-name.ui b/tests/a11y/accessible-name.ui
deleted file mode 100644 (file)
index 8fc76d0..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<interface>
-  <!-- interface-requires gtk+ 3.0 -->
-  <object class="GtkWindow" id="window1">
-    <property name="can_focus">False</property>
-    <property name="type">popup</property>
-    <child>
-      <object class="GtkButton" id="button1">
-        <property name="label" translatable="yes">Hello World!</property>
-        <property name="visible">True</property>
-        <property name="can_focus">True</property>
-        <property name="receives_default">True</property>
-        <child internal-child="accessible">
-          <object class="AtkObject" id="button1-accessible">
-            <property name="accessible-name" translatable="yes">Accessible name</property>
-          </object>
-        </child>
-      </object>
-    </child>
-  </object>
-</interface>
diff --git a/tests/a11y/assistant.txt b/tests/a11y/assistant.txt
deleted file mode 100644 (file)
index 13df1ef..0000000
+++ /dev/null
@@ -1,149 +0,0 @@
-window1
-  "window"
-  index: 0
-  state: enabled resizable sensitive showing visible
-  toolkit: gtk
-  <AtkComponent>
-  layer: window
-  alpha: 1
-  button1
-    "push button"
-    index: 0
-    name: Page 1
-    state: enabled focusable sensitive showing visible
-    toolkit: gtk
-    <AtkComponent>
-    layer: widget
-    alpha: 1
-    <AtkImage>
-    image size: -1 x -1
-    image description: (null)
-    <AtkAction>
-    action 0 name: click
-    action 0 description: Clicks the button
-  button2
-    "push button"
-    index: 0
-    name: Page 2
-    state: enabled focusable sensitive visible
-    toolkit: gtk
-    <AtkComponent>
-    layer: widget
-    alpha: 1
-    <AtkImage>
-    image size: -1 x -1
-    image description: (null)
-    <AtkAction>
-    action 0 name: click
-    action 0 description: Clicks the button
-  action_area
-    "filler"
-    parent: content_box
-    index: 1
-    state: enabled horizontal sensitive showing visible
-    toolkit: gtk
-    <AtkComponent>
-    layer: widget
-    alpha: 1
-    close
-      "push button"
-      parent: action_area
-      index: 0
-      name: Close
-      state: enabled focusable sensitive
-      toolkit: gtk
-      <AtkComponent>
-      layer: widget
-      alpha: 1
-      <AtkImage>
-      image size: 20 x 20
-      image description: (null)
-      <AtkAction>
-      action 0 name: click
-      action 0 description: Clicks the button
-      action 0 keybinding: <Alt>c
-    cancel
-      "push button"
-      parent: action_area
-      index: 1
-      name: Cancel
-      state: enabled focusable sensitive showing visible
-      toolkit: gtk
-      <AtkComponent>
-      layer: widget
-      alpha: 1
-      <AtkImage>
-      image size: 20 x 20
-      image description: (null)
-      <AtkAction>
-      action 0 name: click
-      action 0 description: Clicks the button
-      action 0 keybinding: <Alt>c
-    last
-      "push button"
-      parent: action_area
-      index: 2
-      name: Finish
-      state: focusable
-      toolkit: gtk
-      <AtkComponent>
-      layer: widget
-      alpha: 1
-      <AtkImage>
-      image size: 20 x 20
-      image description: (null)
-      <AtkAction>
-      action 0 name: click
-      action 0 description: Clicks the button
-      action 0 keybinding: <Alt>f
-    back
-      "push button"
-      parent: action_area
-      index: 3
-      name: Go Back
-      state: enabled focusable sensitive
-      toolkit: gtk
-      <AtkComponent>
-      layer: widget
-      alpha: 1
-      <AtkImage>
-      image size: 20 x 20
-      image description: (null)
-      <AtkAction>
-      action 0 name: click
-      action 0 description: Clicks the button
-      action 0 keybinding: <Alt>b
-    forward
-      "push button"
-      parent: action_area
-      index: 4
-      name: Continue
-      state: focusable showing visible
-      toolkit: gtk
-      <AtkComponent>
-      layer: widget
-      alpha: 1
-      <AtkImage>
-      image size: 20 x 20
-      image description: (null)
-      <AtkAction>
-      action 0 name: click
-      action 0 description: Clicks the button
-      action 0 keybinding: <Alt>o
-    apply
-      "push button"
-      parent: action_area
-      index: 5
-      name: Apply
-      state: enabled focusable sensitive
-      toolkit: gtk
-      <AtkComponent>
-      layer: widget
-      alpha: 1
-      <AtkImage>
-      image size: 20 x 20
-      image description: (null)
-      <AtkAction>
-      action 0 name: click
-      action 0 description: Clicks the button
-      action 0 keybinding: <Alt>a
diff --git a/tests/a11y/assistant.ui b/tests/a11y/assistant.ui
deleted file mode 100644 (file)
index aed2044..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<interface>
-  <!-- interface-requires gtk+ 3.0 -->
-  <object class="GtkAssistant" id="window1">
-    <property name="can_focus">False</property>
-    <property name="type">popup</property>
-    <child>
-      <object class="GtkButton" id="button1">
-        <property name="label" translatable="yes">Button 1</property>
-        <property name="visible">True</property>
-        <property name="can_focus">True</property>
-      </object>
-      <packing>
-        <property name="title" translatable="yes">Page 1</property>
-      </packing>
-    </child>
-    <child>
-      <object class="GtkButton" id="button2">
-        <property name="label" translatable="yes">Button 2</property>
-        <property name="visible">True</property>
-        <property name="can_focus">True</property>
-      </object>
-      <packing>
-        <property name="title" translatable="yes">Page 2</property>
-      </packing>
-    </child>
-  </object>
-</interface>
diff --git a/tests/a11y/buttons.txt b/tests/a11y/buttons.txt
deleted file mode 100644 (file)
index 6b1fd88..0000000
+++ /dev/null
@@ -1,113 +0,0 @@
-window1
-  "window"
-  index: 0
-  state: enabled resizable sensitive showing visible
-  toolkit: gtk
-  <AtkComponent>
-  layer: window
-  alpha: 1
-  grid1
-    "panel"
-    parent: window1
-    index: 0
-    state: enabled horizontal sensitive showing visible
-    toolkit: gtk
-    <AtkComponent>
-    layer: widget
-    alpha: 1
-    button6
-      "toggle button"
-      parent: grid1
-      index: 0
-      name: Test switch
-      description: Switches between on and off states
-      state: enabled focusable sensitive showing visible
-      toolkit: gtk
-      <AtkComponent>
-      layer: widget
-      alpha: 1
-      <AtkAction>
-      action 0 name: toggle
-      action 0 description: Toggles the switch
-    button5
-      "toggle button"
-      parent: grid1
-      index: 1
-      name: Switch
-      description: Switches between on and off states
-      state: checked enabled focusable sensitive showing visible
-      toolkit: gtk
-      <AtkComponent>
-      layer: widget
-      alpha: 1
-      <AtkAction>
-      action 0 name: toggle
-      action 0 description: Toggles the switch
-    button4
-      "radio button"
-      parent: grid1
-      index: 2
-      name: Hello World!
-      member-of: button4
-                 button3
-      state: enabled focusable sensitive showing visible
-      toolkit: gtk
-      <AtkComponent>
-      layer: widget
-      alpha: 1
-      <AtkImage>
-      image size: -1 x -1
-      image description: (null)
-      <AtkAction>
-      action 0 name: click
-      action 0 description: Clicks the button
-    button3
-      "radio button"
-      parent: grid1
-      index: 3
-      name: Hello World!
-      member-of: button4
-                 button3
-      state: armed checked enabled focusable sensitive showing visible
-      toolkit: gtk
-      <AtkComponent>
-      layer: widget
-      alpha: 1
-      <AtkImage>
-      image size: -1 x -1
-      image description: (null)
-      <AtkAction>
-      action 0 name: click
-      action 0 description: Clicks the button
-    button2
-      "check box"
-      parent: grid1
-      index: 4
-      name: Hello World!
-      state: enabled focusable sensitive showing visible
-      toolkit: gtk
-      <AtkComponent>
-      layer: widget
-      alpha: 1
-      <AtkImage>
-      image size: -1 x -1
-      image description: (null)
-      <AtkAction>
-      action 0 name: click
-      action 0 description: Clicks the button
-    button1
-      "toggle button"
-      parent: grid1
-      index: 5
-      name: Hello World!
-      state: armed checked enabled focusable sensitive showing visible
-      toolkit: gtk
-      <AtkComponent>
-      layer: widget
-      alpha: 1
-      <AtkImage>
-      image size: -1 x -1
-      image description: (null)
-      <AtkAction>
-      action 0 name: click
-      action 0 description: Clicks the button
diff --git a/tests/a11y/buttons.ui b/tests/a11y/buttons.ui
deleted file mode 100644 (file)
index b229bbb..0000000
+++ /dev/null
@@ -1,95 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<interface>
-  <!-- interface-requires gtk+ 3.0 -->
-  <object class="GtkWindow" id="window1">
-    <property name="can_focus">False</property>
-    <property name="type">popup</property>
-    <child>
-      <object class="GtkGrid" id="grid1">
-        <property name="visible">True</property>
-        <child>
-          <object class="GtkToggleButton" id="button1">
-            <property name="label" translatable="yes">Hello World!</property>
-            <property name="visible">True</property>
-            <property name="active">True</property>
-            <property name="can_focus">True</property>
-            <property name="receives_default">True</property>
-          </object>
-          <packing>
-            <property name="left_attach">0</property>
-            <property name="top_attach">0</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkCheckButton" id="button2">
-            <property name="label" translatable="yes">Hello World!</property>
-            <property name="visible">True</property>
-            <property name="active">False</property>
-            <property name="can_focus">True</property>
-            <property name="receives_default">True</property>
-          </object>
-          <packing>
-            <property name="left_attach">1</property>
-            <property name="top_attach">0</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkRadioButton" id="button3">
-            <property name="label" translatable="yes">Hello World!</property>
-            <property name="visible">True</property>
-            <property name="active">False</property>
-            <property name="can_focus">True</property>
-            <property name="receives_default">True</property>
-          </object>
-          <packing>
-            <property name="left_attach">2</property>
-            <property name="top_attach">0</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkRadioButton" id="button4">
-            <property name="label" translatable="yes">Hello World!</property>
-            <property name="visible">True</property>
-            <property name="active">True</property>
-            <property name="group">button3</property>
-            <property name="can_focus">True</property>
-            <property name="receives_default">True</property>
-          </object>
-          <packing>
-            <property name="left_attach">3</property>
-            <property name="top_attach">0</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkSwitch" id="button5">
-            <property name="visible">True</property>
-            <property name="active">True</property>
-            <property name="can_focus">True</property>
-            <property name="receives_default">True</property>
-          </object>
-          <packing>
-            <property name="left_attach">4</property>
-            <property name="top_attach">0</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkSwitch" id="button6">
-            <property name="visible">True</property>
-            <property name="active">False</property>
-            <property name="can_focus">True</property>
-            <property name="receives_default">True</property>
-            <child internal-child="accessible">
-              <object class="AtkObject" id="button6-accessible">
-                <property name="accessible-name">Test switch</property>
-              </object>
-            </child>
-          </object>
-          <packing>
-            <property name="left_attach">5</property>
-            <property name="top_attach">0</property>
-          </packing>
-        </child>
-      </object>
-    </child>
-  </object>
-</interface>
diff --git a/tests/a11y/calendar.txt b/tests/a11y/calendar.txt
deleted file mode 100644 (file)
index 06985b9..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-window1
-  "window"
-  index: 0
-  state: enabled resizable sensitive showing visible
-  toolkit: gtk
-  <AtkComponent>
-  layer: window
-  alpha: 1
-  calendar1
-    "calendar"
-    parent: window1
-    index: 0
-    state: enabled focusable sensitive showing visible
-    toolkit: gtk
-    <AtkComponent>
-    layer: widget
-    alpha: 1
diff --git a/tests/a11y/calendar.ui b/tests/a11y/calendar.ui
deleted file mode 100644 (file)
index f4562c4..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<interface>
-  <!-- interface-requires gtk+ 3.0 -->
-  <object class="GtkWindow" id="window1">
-    <property name="can_focus">False</property>
-    <property name="type">popup</property>
-    <child>
-      <object class="GtkCalendar" id="calendar1">
-        <property name="visible">True</property>
-        <property name="day">1</property>
-        <property name="month">2</property>
-        <property name="year">1970</property>
-      </object>
-    </child>
-  </object>
-</interface>
diff --git a/tests/a11y/children.c b/tests/a11y/children.c
deleted file mode 100644 (file)
index a2d847e..0000000
+++ /dev/null
@@ -1,269 +0,0 @@
-/*
- * Copyright (C) 2011 Red Hat Inc.
- *
- * Author:
- *      Matthias Clasen <mclasen@redhat.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#define GDK_DISABLE_DEPRECATION_WARNINGS
-#undef GTK_DISABLE_DEPRECATED
-
-#include <gtk/gtk.h>
-#include <string.h>
-
-typedef struct
-{
-  GtkWidget *widget;
-  gpointer child[3];
-} STATE;
-
-static void
-test_scrolled_window_child_count (void)
-{
-  GtkWidget *sw;
-  AtkObject *accessible;
-
-  sw = gtk_scrolled_window_new (NULL, NULL);
-  g_object_ref_sink (sw);
-  gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw),
-                                  GTK_POLICY_ALWAYS, GTK_POLICY_ALWAYS);
-  gtk_container_add (GTK_CONTAINER (sw), gtk_label_new ("Bla"));
-
-  accessible = gtk_widget_get_accessible (sw);
-  g_assert_cmpint (atk_object_get_n_accessible_children (accessible), ==, 3);
-
-  g_object_unref (sw);
-}
-
-typedef struct {
-  gint count;
-  gint index;
-  gint n_children;
-  gpointer parent;
-} SignalData;
-
-static void
-children_changed (AtkObject  *accessible,
-                  guint       index,
-                  gpointer    child,
-                  SignalData *data)
-{
-  data->count++;
-  data->index = index;
-  data->n_children = atk_object_get_n_accessible_children (accessible);
-}
-
-static void
-remove_child (STATE *state,
-              gint i)
-{
-  GtkWidget *child;
-
-  if (GTK_IS_ENTRY (state->widget))
-    {
-      switch (i)
-        {
-        case 0:
-          gtk_entry_set_icon_from_gicon (GTK_ENTRY (state->widget),
-                                         GTK_ENTRY_ICON_PRIMARY,
-                                         NULL);
-        return;
-        case 1:
-          gtk_entry_set_icon_from_gicon (GTK_ENTRY (state->widget),
-                                         GTK_ENTRY_ICON_SECONDARY,
-                                         NULL);
-        return;
-        default:
-          return;
-        }
-    }
-
-  child = state->child [i];
-  if (GTK_IS_SCROLLED_WINDOW (state->widget))
-    {
-      if (gtk_widget_get_parent (child) != state->widget)
-        child = gtk_widget_get_parent (child);
-    }
-
-  gtk_container_remove (GTK_CONTAINER (state->widget), child);
-}
-
-static void
-parent_notify (AtkObject *obj, GParamSpec *pspec, SignalData *data)
-{
-  data->count++;
-  data->parent = atk_object_get_parent (obj);
-}
-
-gboolean
-do_create_child (STATE *state, gint i)
-{
-  if (GTK_IS_ENTRY (state->widget))
-    {
-      switch (i)
-        {
-        case 0:
-          gtk_entry_set_icon_from_stock (GTK_ENTRY (state->widget),
-                                         GTK_ENTRY_ICON_PRIMARY,
-                                         GTK_STOCK_CAPS_LOCK_WARNING);
-        return TRUE;
-        case 1:
-          gtk_entry_set_icon_from_stock (GTK_ENTRY (state->widget),
-                                         GTK_ENTRY_ICON_SECONDARY,
-                                         GTK_STOCK_CLEAR);
-        return TRUE;
-        default:
-          return FALSE;
-        }
-    }
-  else if (gtk_container_child_type (GTK_CONTAINER (state->widget)) == G_TYPE_NONE)
-    return FALSE;
-
-  state->child[i] = gtk_label_new ("bla");
-  return TRUE;
-}
-
-static void
-test_add_remove (GtkWidget *widget)
-{
-  AtkObject *accessible;
-  AtkObject *child_accessible;
-  SignalData add_data;
-  SignalData remove_data;
-  SignalData parent_data[3];
-  STATE state;
-  gint i, j;
-  gint step_children;
-
-  state.widget = widget;
-  accessible = gtk_widget_get_accessible (widget);
-
-  add_data.count = 0;
-  remove_data.count = 0;
-  g_signal_connect (accessible, "children_changed::add",
-                    G_CALLBACK (children_changed), &add_data);
-  g_signal_connect (accessible, "children_changed::remove",
-                    G_CALLBACK (children_changed), &remove_data);
-
-  step_children = atk_object_get_n_accessible_children (accessible);
-
-  for (i = 0; i < 3; i++)
-    {
-      if (!do_create_child (&state, i))
-        break;
-      if (!GTK_IS_ENTRY (widget))
-        {
-          parent_data[i].count = 0;
-          child_accessible = gtk_widget_get_accessible (state.child[i]);
-          g_signal_connect (child_accessible, "notify::accessible-parent",
-                            G_CALLBACK (parent_notify), &(parent_data[i]));
-          gtk_container_add (GTK_CONTAINER (widget), state.child[i]);
-        }
-      else
-        child_accessible = atk_object_ref_accessible_child (accessible, i);
-
-      g_assert_cmpint (add_data.count, ==, i + 1);
-      g_assert_cmpint (add_data.n_children, ==, step_children + i + 1);
-      g_assert_cmpint (remove_data.count, ==, 0);
-      if (!GTK_IS_ENTRY (widget))
-        g_assert_cmpint (parent_data[i].count, ==, 1);
-      if (GTK_IS_SCROLLED_WINDOW (widget) ||
-          GTK_IS_NOTEBOOK (widget))
-        g_assert (atk_object_get_parent (ATK_OBJECT (parent_data[i].parent)) == accessible);
-      else if (GTK_IS_ENTRY (widget))
-        g_assert (atk_object_get_parent (child_accessible) == accessible);
-      else
-        g_assert (parent_data[i].parent == accessible);
-
-      if (GTK_IS_ENTRY (widget))
-        g_object_unref (child_accessible);
-    }
-  for (j = 0 ; j < i; j++)
-    {
-      remove_child (&state, j);
-      g_assert_cmpint (add_data.count, ==, i);
-      g_assert_cmpint (remove_data.count, ==, j + 1);
-      g_assert_cmpint (remove_data.n_children, ==, step_children + i - j - 1);
-      if (parent_data[j].count == 2)
-        g_assert (parent_data[j].parent == NULL);
-      else if (!GTK_IS_ENTRY (widget))
-        {
-          AtkStateSet *set;
-          set = atk_object_ref_state_set (ATK_OBJECT (parent_data[j].parent));
-          g_assert (atk_state_set_contains_state (set, ATK_STATE_DEFUNCT));
-          g_object_unref (set);
-        }
-    }
-
-  g_signal_handlers_disconnect_by_func (accessible, G_CALLBACK (children_changed), &add_data);
-  g_signal_handlers_disconnect_by_func (accessible, G_CALLBACK (children_changed), &remove_data);
-}
-
-static void
-add_child_test (const gchar      *prefix,
-                GTestFixtureFunc  test_func,
-                GtkWidget        *widget)
-{
-  gchar *path;
-
-  path = g_strdup_printf ("%s/%s", prefix, G_OBJECT_TYPE_NAME (widget));
-  g_test_add_vtable (path,
-                     0,
-                     g_object_ref (widget),
-                     0,
-                     (GTestFixtureFunc) test_func,
-                     (GTestFixtureFunc) g_object_unref);
-  g_free (path);
-}
-
-static void
-add_child_tests (GtkWidget *widget)
-{
-  g_object_ref_sink (widget);
-  add_child_test ("/child/add-remove", (GTestFixtureFunc)test_add_remove, widget);
-  g_object_unref (widget);
-}
-
-int
-main (int argc, char *argv[])
-{
-  gtk_test_init (&argc, &argv, NULL);
-
-  g_test_add_func ("/scrolledwindow/child-count", test_scrolled_window_child_count);
-
-  add_child_tests (gtk_scrolled_window_new (NULL, NULL));
-  add_child_tests (gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0));
-  add_child_tests (gtk_paned_new (GTK_ORIENTATION_HORIZONTAL));
-  add_child_tests (gtk_grid_new ());
-  add_child_tests (gtk_event_box_new ());
-  add_child_tests (gtk_window_new (GTK_WINDOW_TOPLEVEL));
-  add_child_tests (gtk_assistant_new ());
-  add_child_tests (gtk_frame_new ("frame"));
-  add_child_tests (gtk_expander_new ("expander"));
-  add_child_tests (gtk_table_new (2, 2, FALSE));
-  add_child_tests (gtk_text_view_new ());
-  add_child_tests (gtk_tree_view_new ());
-#if 0
-  /* gail doesn't handle non-label children in these */
-  add_child_tests (gtk_button_new ());
-  add_child_tests (gtk_statusbar_new ());
-#endif
-  add_child_tests (gtk_notebook_new ());
-  add_child_tests (gtk_entry_new ());
-
-  return g_test_run ();
-}
-
diff --git a/tests/a11y/colorchooser.txt b/tests/a11y/colorchooser.txt
deleted file mode 100644 (file)
index 1db200d..0000000
+++ /dev/null
@@ -1,1373 +0,0 @@
-window1
-  "color chooser"
-  index: 0
-  name: Color Selection
-  state: enabled resizable sensitive showing visible
-  toolkit: gtk
-  <AtkComponent>
-  layer: window
-  alpha: 1
-  vbox
-    "filler"
-    parent: window1
-    index: 0
-    state: enabled sensitive showing vertical visible
-    toolkit: gtk
-    <AtkComponent>
-    layer: widget
-    alpha: 1
-    unnamed-GtkContainerAccessible-0
-      "color chooser"
-      parent: vbox
-      index: 0
-      state: enabled sensitive showing vertical visible
-      toolkit: gtk
-      <AtkComponent>
-      layer: widget
-      alpha: 1
-      unnamed-GtkContainerAccessible-1
-        "filler"
-        parent: unnamed-GtkContainerAccessible-0
-        index: 0
-        state: enabled horizontal sensitive showing visible
-        toolkit: gtk
-        <AtkComponent>
-        layer: widget
-        alpha: 1
-        unnamed-GtkContainerAccessible-2
-          "filler"
-          parent: unnamed-GtkContainerAccessible-1
-          index: 0
-          state: enabled sensitive showing vertical visible
-          toolkit: gtk
-          <AtkComponent>
-          layer: widget
-          alpha: 1
-          unnamed-GtkWidgetAccessible-3
-            "color chooser"
-            parent: unnamed-GtkContainerAccessible-2
-            index: 0
-            name: Color Wheel
-            description: Select the color you want from the outer ring. Select the darkness or lightness of that color using the inner triangle.
-            controlled-by: 0
-                           0
-                           100
-                           255
-                           255
-                           255
-            state: enabled focusable sensitive showing visible
-            toolkit: gtk
-            <AtkComponent>
-            layer: widget
-            alpha: 1
-          unnamed-GtkContainerAccessible-4
-            "filler"
-            parent: unnamed-GtkContainerAccessible-2
-            index: 1
-            state: enabled horizontal sensitive showing visible
-            toolkit: gtk
-            <AtkComponent>
-            layer: widget
-            alpha: 1
-            unnamed-GtkFrameAccessible-5
-              "panel"
-              parent: unnamed-GtkContainerAccessible-4
-              index: 0
-              state: enabled sensitive showing visible
-              toolkit: gtk
-              <AtkComponent>
-              layer: widget
-              alpha: 1
-              unnamed-GtkContainerAccessible-6
-                "filler"
-                parent: unnamed-GtkFrameAccessible-5
-                index: 0
-                state: enabled horizontal sensitive showing visible
-                toolkit: gtk
-                <AtkComponent>
-                layer: widget
-                alpha: 1
-                unnamed-GtkWidgetAccessible-7
-                  "unknown"
-                  parent: unnamed-GtkContainerAccessible-6
-                  index: 0
-                  description: The previously-selected color, for comparison to the color you're selecting now.
-                  state: enabled sensitive showing visible
-                  toolkit: gtk
-                  <AtkComponent>
-                  layer: widget
-                  alpha: 1
-                unnamed-GtkWidgetAccessible-8
-                  "unknown"
-                  parent: unnamed-GtkContainerAccessible-6
-                  index: 1
-                  description: The color you've chosen.
-                  state: enabled sensitive showing visible
-                  toolkit: gtk
-                  <AtkComponent>
-                  layer: widget
-                  alpha: 1
-            unnamed-GtkButtonAccessible-9
-              "push button"
-              parent: unnamed-GtkContainerAccessible-4
-              index: 1
-              description: Click the eyedropper, then click a color anywhere on your screen to select that color.
-              state: enabled focusable sensitive showing visible
-              toolkit: gtk
-              <AtkComponent>
-              layer: widget
-              alpha: 1
-              <AtkImage>
-              image size: -1 x -1
-              image description: (null)
-              <AtkAction>
-              action 0 name: click
-              action 0 description: Clicks the button
-        unnamed-GtkContainerAccessible-10
-          "filler"
-          parent: unnamed-GtkContainerAccessible-1
-          index: 1
-          state: enabled sensitive showing vertical visible
-          toolkit: gtk
-          <AtkComponent>
-          layer: widget
-          alpha: 1
-          unnamed-GtkContainerAccessible-11
-            "panel"
-            parent: unnamed-GtkContainerAccessible-10
-            index: 0
-            state: enabled horizontal sensitive showing visible
-            toolkit: gtk
-            <AtkComponent>
-            layer: widget
-            alpha: 1
-            #FFFFFF
-              "text"
-              parent: unnamed-GtkContainerAccessible-11
-              index: 0
-              description: You can enter an HTML-style hexadecimal color value, or simply a color name such as 'orange' in this entry.
-              labelled-by: Color name:
-              state: editable enabled focusable sensitive showing single-line visible
-              toolkit: gtk
-              <AtkComponent>
-              layer: widget
-              alpha: 1
-              <AtkText>
-              text: #FFFFFF
-              character count: 7
-              caret offset: 0
-              default attributes: bg-color: <omitted>
-                                  bg-full-height: 0
-                                  direction: <omitted>
-                                  editable: false
-                                  family-name: <omitted>
-                                  fg-color: <omitted>
-                                  indent: 0
-                                  invisible: false
-                                  justification: left
-                                  language: <omitted>
-                                  left-margin: 0
-                                  pixels-above-lines: 0
-                                  pixels-below-lines: 0
-                                  pixels-inside-wrap: 0
-                                  right-margin: 0
-                                  rise: 0
-                                  scale: 1
-                                  size: <omitted>
-                                  stretch: <omitted>
-                                  strikethrough: false
-                                  style: <omitted>
-                                  underline: none
-                                  variant: <omitted>
-                                  weight: <omitted>
-                                  wrap-mode: word
-              <AtkAction>
-              action 0 name: activate
-              action 0 description: Activates the entry
-              action 0 keybinding: <Alt>n
-            Color name:
-              "label"
-              parent: unnamed-GtkContainerAccessible-11
-              index: 1
-              name: Color name:
-              label-for: #FFFFFF
-              state: enabled multi-line sensitive showing visible
-              toolkit: gtk
-              <AtkComponent>
-              layer: widget
-              alpha: 1
-              <AtkText>
-              text: Color name:
-              character count: 11
-              caret offset: 0
-              default attributes: bg-color: <omitted>
-                                  bg-full-height: 0
-                                  direction: <omitted>
-                                  editable: false
-                                  family-name: <omitted>
-                                  fg-color: <omitted>
-                                  indent: 0
-                                  invisible: false
-                                  justification: left
-                                  language: <omitted>
-                                  left-margin: 0
-                                  pixels-above-lines: 0
-                                  pixels-below-lines: 0
-                                  pixels-inside-wrap: 0
-                                  right-margin: 0
-                                  rise: 0
-                                  scale: 1
-                                  size: <omitted>
-                                  stretch: <omitted>
-                                  strikethrough: false
-                                  style: <omitted>
-                                  underline: none
-                                  variant: <omitted>
-                                  weight: <omitted>
-                                  wrap-mode: word
-            255
-              "text"
-              parent: unnamed-GtkContainerAccessible-11
-              index: 2
-              description: Transparency of the color.
-              state: editable enabled focusable sensitive single-line
-              toolkit: gtk
-              <AtkComponent>
-              layer: widget
-              alpha: 1
-              <AtkText>
-              text: 255
-              character count: 3
-              caret offset: 0
-              default attributes: bg-color: <omitted>
-                                  bg-full-height: 0
-                                  direction: <omitted>
-                                  editable: false
-                                  family-name: <omitted>
-                                  fg-color: <omitted>
-                                  indent: 0
-                                  invisible: false
-                                  justification: left
-                                  language: <omitted>
-                                  left-margin: 0
-                                  pixels-above-lines: 0
-                                  pixels-below-lines: 0
-                                  pixels-inside-wrap: 0
-                                  right-margin: 0
-                                  rise: 0
-                                  scale: 1
-                                  size: <omitted>
-                                  stretch: <omitted>
-                                  strikethrough: false
-                                  style: <omitted>
-                                  underline: none
-                                  variant: <omitted>
-                                  weight: <omitted>
-                                  wrap-mode: word
-              <AtkAction>
-              action 0 name: activate
-              action 0 description: Activates the entry
-            unnamed-GtkScaleAccessible-12
-              "slider"
-              parent: unnamed-GtkContainerAccessible-11
-              index: 3
-              description: Transparency of the color.
-              labelled-by: Opacity:
-              state: enabled focusable horizontal sensitive
-              toolkit: gtk
-              <AtkComponent>
-              layer: widget
-              alpha: 1
-              <AtkValue>
-              minimum value: 0.000000
-              maximum value: 255.000000
-              current value: 255.000000
-              minimum increment: 1.000000
-            Opacity:
-              "label"
-              parent: unnamed-GtkContainerAccessible-11
-              index: 4
-              name: Opacity:
-              label-for: unnamed-GtkScaleAccessible-12
-              state: enabled multi-line sensitive
-              toolkit: gtk
-              <AtkComponent>
-              layer: widget
-              alpha: 1
-              <AtkText>
-              text: Opacity:
-              character count: 8
-              caret offset: 0
-              default attributes: bg-color: <omitted>
-                                  bg-full-height: 0
-                                  direction: <omitted>
-                                  editable: false
-                                  family-name: <omitted>
-                                  fg-color: <omitted>
-                                  indent: 0
-                                  invisible: false
-                                  justification: left
-                                  language: <omitted>
-                                  left-margin: 0
-                                  pixels-above-lines: 0
-                                  pixels-below-lines: 0
-                                  pixels-inside-wrap: 0
-                                  right-margin: 0
-                                  rise: 0
-                                  scale: 1
-                                  size: <omitted>
-                                  stretch: <omitted>
-                                  strikethrough: false
-                                  style: <omitted>
-                                  underline: none
-                                  variant: <omitted>
-                                  weight: <omitted>
-                                  wrap-mode: word
-            unnamed-GtkWidgetAccessible-13
-              "separator"
-              parent: unnamed-GtkContainerAccessible-11
-              index: 5
-              state: enabled horizontal sensitive showing visible
-              toolkit: gtk
-              <AtkComponent>
-              layer: widget
-              alpha: 1
-            255
-              "spin button"
-              parent: unnamed-GtkContainerAccessible-11
-              index: 6
-              description: Amount of blue light in the color.
-              controller-for: unnamed-GtkWidgetAccessible-3
-              labelled-by: Blue:
-              state: editable enabled focusable horizontal sensitive showing single-line visible
-              toolkit: gtk
-              <AtkComponent>
-              layer: widget
-              alpha: 1
-              <AtkText>
-              text: 255
-              character count: 3
-              caret offset: 0
-              default attributes: bg-color: <omitted>
-                                  bg-full-height: 0
-                                  direction: <omitted>
-                                  editable: false
-                                  family-name: <omitted>
-                                  fg-color: <omitted>
-                                  indent: 0
-                                  invisible: false
-                                  justification: left
-                                  language: <omitted>
-                                  left-margin: 0
-                                  pixels-above-lines: 0
-                                  pixels-below-lines: 0
-                                  pixels-inside-wrap: 0
-                                  right-margin: 0
-                                  rise: 0
-                                  scale: 1
-                                  size: <omitted>
-                                  stretch: <omitted>
-                                  strikethrough: false
-                                  style: <omitted>
-                                  underline: none
-                                  variant: <omitted>
-                                  weight: <omitted>
-                                  wrap-mode: word
-              <AtkAction>
-              action 0 name: activate
-              action 0 description: Activates the entry
-              action 0 keybinding: <Alt>b
-              <AtkValue>
-              minimum value: 0.000000
-              maximum value: 255.000000
-              current value: 255.000000
-              minimum increment: 1.000000
-            Blue:
-              "label"
-              parent: unnamed-GtkContainerAccessible-11
-              index: 7
-              name: Blue:
-              label-for: 255
-              state: enabled multi-line sensitive showing visible
-              toolkit: gtk
-              <AtkComponent>
-              layer: widget
-              alpha: 1
-              <AtkText>
-              text: Blue:
-              character count: 5
-              caret offset: 0
-              default attributes: bg-color: <omitted>
-                                  bg-full-height: 0
-                                  direction: <omitted>
-                                  editable: false
-                                  family-name: <omitted>
-                                  fg-color: <omitted>
-                                  indent: 0
-                                  invisible: false
-                                  justification: left
-                                  language: <omitted>
-                                  left-margin: 0
-                                  pixels-above-lines: 0
-                                  pixels-below-lines: 0
-                                  pixels-inside-wrap: 0
-                                  right-margin: 0
-                                  rise: 0
-                                  scale: 1
-                                  size: <omitted>
-                                  stretch: <omitted>
-                                  strikethrough: false
-                                  style: <omitted>
-                                  underline: none
-                                  variant: <omitted>
-                                  weight: <omitted>
-                                  wrap-mode: word
-            255
-              "spin button"
-              parent: unnamed-GtkContainerAccessible-11
-              index: 8
-              description: Amount of green light in the color.
-              controller-for: unnamed-GtkWidgetAccessible-3
-              labelled-by: Green:
-              state: editable enabled focusable horizontal sensitive showing single-line visible
-              toolkit: gtk
-              <AtkComponent>
-              layer: widget
-              alpha: 1
-              <AtkText>
-              text: 255
-              character count: 3
-              caret offset: 0
-              default attributes: bg-color: <omitted>
-                                  bg-full-height: 0
-                                  direction: <omitted>
-                                  editable: false
-                                  family-name: <omitted>
-                                  fg-color: <omitted>
-                                  indent: 0
-                                  invisible: false
-                                  justification: left
-                                  language: <omitted>
-                                  left-margin: 0
-                                  pixels-above-lines: 0
-                                  pixels-below-lines: 0
-                                  pixels-inside-wrap: 0
-                                  right-margin: 0
-                                  rise: 0
-                                  scale: 1
-                                  size: <omitted>
-                                  stretch: <omitted>
-                                  strikethrough: false
-                                  style: <omitted>
-                                  underline: none
-                                  variant: <omitted>
-                                  weight: <omitted>
-                                  wrap-mode: word
-              <AtkAction>
-              action 0 name: activate
-              action 0 description: Activates the entry
-              action 0 keybinding: <Alt>g
-              <AtkValue>
-              minimum value: 0.000000
-              maximum value: 255.000000
-              current value: 255.000000
-              minimum increment: 1.000000
-            Green:
-              "label"
-              parent: unnamed-GtkContainerAccessible-11
-              index: 9
-              name: Green:
-              label-for: 255
-              state: enabled multi-line sensitive showing visible
-              toolkit: gtk
-              <AtkComponent>
-              layer: widget
-              alpha: 1
-              <AtkText>
-              text: Green:
-              character count: 6
-              caret offset: 0
-              default attributes: bg-color: <omitted>
-                                  bg-full-height: 0
-                                  direction: <omitted>
-                                  editable: false
-                                  family-name: <omitted>
-                                  fg-color: <omitted>
-                                  indent: 0
-                                  invisible: false
-                                  justification: left
-                                  language: <omitted>
-                                  left-margin: 0
-                                  pixels-above-lines: 0
-                                  pixels-below-lines: 0
-                                  pixels-inside-wrap: 0
-                                  right-margin: 0
-                                  rise: 0
-                                  scale: 1
-                                  size: <omitted>
-                                  stretch: <omitted>
-                                  strikethrough: false
-                                  style: <omitted>
-                                  underline: none
-                                  variant: <omitted>
-                                  weight: <omitted>
-                                  wrap-mode: word
-            255
-              "spin button"
-              parent: unnamed-GtkContainerAccessible-11
-              index: 10
-              description: Amount of red light in the color.
-              controller-for: unnamed-GtkWidgetAccessible-3
-              labelled-by: Red:
-              state: editable enabled focusable horizontal sensitive showing single-line visible
-              toolkit: gtk
-              <AtkComponent>
-              layer: widget
-              alpha: 1
-              <AtkText>
-              text: 255
-              character count: 3
-              caret offset: 0
-              default attributes: bg-color: <omitted>
-                                  bg-full-height: 0
-                                  direction: <omitted>
-                                  editable: false
-                                  family-name: <omitted>
-                                  fg-color: <omitted>
-                                  indent: 0
-                                  invisible: false
-                                  justification: left
-                                  language: <omitted>
-                                  left-margin: 0
-                                  pixels-above-lines: 0
-                                  pixels-below-lines: 0
-                                  pixels-inside-wrap: 0
-                                  right-margin: 0
-                                  rise: 0
-                                  scale: 1
-                                  size: <omitted>
-                                  stretch: <omitted>
-                                  strikethrough: false
-                                  style: <omitted>
-                                  underline: none
-                                  variant: <omitted>
-                                  weight: <omitted>
-                                  wrap-mode: word
-              <AtkAction>
-              action 0 name: activate
-              action 0 description: Activates the entry
-              action 0 keybinding: <Alt>r
-              <AtkValue>
-              minimum value: 0.000000
-              maximum value: 255.000000
-              current value: 255.000000
-              minimum increment: 1.000000
-            Red:
-              "label"
-              parent: unnamed-GtkContainerAccessible-11
-              index: 11
-              name: Red:
-              label-for: 255
-              state: enabled multi-line sensitive showing visible
-              toolkit: gtk
-              <AtkComponent>
-              layer: widget
-              alpha: 1
-              <AtkText>
-              text: Red:
-              character count: 4
-              caret offset: 0
-              default attributes: bg-color: <omitted>
-                                  bg-full-height: 0
-                                  direction: <omitted>
-                                  editable: false
-                                  family-name: <omitted>
-                                  fg-color: <omitted>
-                                  indent: 0
-                                  invisible: false
-                                  justification: left
-                                  language: <omitted>
-                                  left-margin: 0
-                                  pixels-above-lines: 0
-                                  pixels-below-lines: 0
-                                  pixels-inside-wrap: 0
-                                  right-margin: 0
-                                  rise: 0
-                                  scale: 1
-                                  size: <omitted>
-                                  stretch: <omitted>
-                                  strikethrough: false
-                                  style: <omitted>
-                                  underline: none
-                                  variant: <omitted>
-                                  weight: <omitted>
-                                  wrap-mode: word
-            100
-              "spin button"
-              parent: unnamed-GtkContainerAccessible-11
-              index: 12
-              description: Brightness of the color.
-              controller-for: unnamed-GtkWidgetAccessible-3
-              labelled-by: Value:
-              state: editable enabled focusable horizontal sensitive showing single-line visible
-              toolkit: gtk
-              <AtkComponent>
-              layer: widget
-              alpha: 1
-              <AtkText>
-              text: 100
-              character count: 3
-              caret offset: 0
-              default attributes: bg-color: <omitted>
-                                  bg-full-height: 0
-                                  direction: <omitted>
-                                  editable: false
-                                  family-name: <omitted>
-                                  fg-color: <omitted>
-                                  indent: 0
-                                  invisible: false
-                                  justification: left
-                                  language: <omitted>
-                                  left-margin: 0
-                                  pixels-above-lines: 0
-                                  pixels-below-lines: 0
-                                  pixels-inside-wrap: 0
-                                  right-margin: 0
-                                  rise: 0
-                                  scale: 1
-                                  size: <omitted>
-                                  stretch: <omitted>
-                                  strikethrough: false
-                                  style: <omitted>
-                                  underline: none
-                                  variant: <omitted>
-                                  weight: <omitted>
-                                  wrap-mode: word
-              <AtkAction>
-              action 0 name: activate
-              action 0 description: Activates the entry
-              action 0 keybinding: <Alt>v
-              <AtkValue>
-              minimum value: 0.000000
-              maximum value: 100.000000
-              current value: 100.000000
-              minimum increment: 1.000000
-            Value:
-              "label"
-              parent: unnamed-GtkContainerAccessible-11
-              index: 13
-              name: Value:
-              label-for: 100
-              state: enabled multi-line sensitive showing visible
-              toolkit: gtk
-              <AtkComponent>
-              layer: widget
-              alpha: 1
-              <AtkText>
-              text: Value:
-              character count: 6
-              caret offset: 0
-              default attributes: bg-color: <omitted>
-                                  bg-full-height: 0
-                                  direction: <omitted>
-                                  editable: false
-                                  family-name: <omitted>
-                                  fg-color: <omitted>
-                                  indent: 0
-                                  invisible: false
-                                  justification: left
-                                  language: <omitted>
-                                  left-margin: 0
-                                  pixels-above-lines: 0
-                                  pixels-below-lines: 0
-                                  pixels-inside-wrap: 0
-                                  right-margin: 0
-                                  rise: 0
-                                  scale: 1
-                                  size: <omitted>
-                                  stretch: <omitted>
-                                  strikethrough: false
-                                  style: <omitted>
-                                  underline: none
-                                  variant: <omitted>
-                                  weight: <omitted>
-                                  wrap-mode: word
-            0
-              "spin button"
-              parent: unnamed-GtkContainerAccessible-11
-              index: 14
-              description: Intensity of the color.
-              controller-for: unnamed-GtkWidgetAccessible-3
-              labelled-by: Saturation:
-              state: editable enabled focusable horizontal sensitive showing single-line visible
-              toolkit: gtk
-              <AtkComponent>
-              layer: widget
-              alpha: 1
-              <AtkText>
-              text: 0
-              character count: 1
-              caret offset: 0
-              default attributes: bg-color: <omitted>
-                                  bg-full-height: 0
-                                  direction: <omitted>
-                                  editable: false
-                                  family-name: <omitted>
-                                  fg-color: <omitted>
-                                  indent: 0
-                                  invisible: false
-                                  justification: left
-                                  language: <omitted>
-                                  left-margin: 0
-                                  pixels-above-lines: 0
-                                  pixels-below-lines: 0
-                                  pixels-inside-wrap: 0
-                                  right-margin: 0
-                                  rise: 0
-                                  scale: 1
-                                  size: <omitted>
-                                  stretch: <omitted>
-                                  strikethrough: false
-                                  style: <omitted>
-                                  underline: none
-                                  variant: <omitted>
-                                  weight: <omitted>
-                                  wrap-mode: word
-              <AtkAction>
-              action 0 name: activate
-              action 0 description: Activates the entry
-              action 0 keybinding: <Alt>a
-              <AtkValue>
-              minimum value: 0.000000
-              maximum value: 100.000000
-              current value: 0.000000
-              minimum increment: 1.000000
-            Saturation:
-              "label"
-              parent: unnamed-GtkContainerAccessible-11
-              index: 15
-              name: Saturation:
-              label-for: 0
-              state: enabled multi-line sensitive showing visible
-              toolkit: gtk
-              <AtkComponent>
-              layer: widget
-              alpha: 1
-              <AtkText>
-              text: Saturation:
-              character count: 11
-              caret offset: 0
-              default attributes: bg-color: <omitted>
-                                  bg-full-height: 0
-                                  direction: <omitted>
-                                  editable: false
-                                  family-name: <omitted>
-                                  fg-color: <omitted>
-                                  indent: 0
-                                  invisible: false
-                                  justification: left
-                                  language: <omitted>
-                                  left-margin: 0
-                                  pixels-above-lines: 0
-                                  pixels-below-lines: 0
-                                  pixels-inside-wrap: 0
-                                  right-margin: 0
-                                  rise: 0
-                                  scale: 1
-                                  size: <omitted>
-                                  stretch: <omitted>
-                                  strikethrough: false
-                                  style: <omitted>
-                                  underline: none
-                                  variant: <omitted>
-                                  weight: <omitted>
-                                  wrap-mode: word
-            0
-              "spin button"
-              parent: unnamed-GtkContainerAccessible-11
-              index: 16
-              description: Position on the color wheel.
-              controller-for: unnamed-GtkWidgetAccessible-3
-              labelled-by: Hue:
-              state: editable enabled focusable horizontal sensitive showing single-line visible
-              toolkit: gtk
-              <AtkComponent>
-              layer: widget
-              alpha: 1
-              <AtkText>
-              text: 0
-              character count: 1
-              caret offset: 0
-              default attributes: bg-color: <omitted>
-                                  bg-full-height: 0
-                                  direction: <omitted>
-                                  editable: false
-                                  family-name: <omitted>
-                                  fg-color: <omitted>
-                                  indent: 0
-                                  invisible: false
-                                  justification: left
-                                  language: <omitted>
-                                  left-margin: 0
-                                  pixels-above-lines: 0
-                                  pixels-below-lines: 0
-                                  pixels-inside-wrap: 0
-                                  right-margin: 0
-                                  rise: 0
-                                  scale: 1
-                                  size: <omitted>
-                                  stretch: <omitted>
-                                  strikethrough: false
-                                  style: <omitted>
-                                  underline: none
-                                  variant: <omitted>
-                                  weight: <omitted>
-                                  wrap-mode: word
-              <AtkAction>
-              action 0 name: activate
-              action 0 description: Activates the entry
-              action 0 keybinding: <Alt>h
-              <AtkValue>
-              minimum value: 0.000000
-              maximum value: 360.000000
-              current value: 0.000000
-              minimum increment: 1.000000
-            Hue:
-              "label"
-              parent: unnamed-GtkContainerAccessible-11
-              index: 17
-              name: Hue:
-              label-for: 0
-              state: enabled multi-line sensitive showing visible
-              toolkit: gtk
-              <AtkComponent>
-              layer: widget
-              alpha: 1
-              <AtkText>
-              text: Hue:
-              character count: 4
-              caret offset: 0
-              default attributes: bg-color: <omitted>
-                                  bg-full-height: 0
-                                  direction: <omitted>
-                                  editable: false
-                                  family-name: <omitted>
-                                  fg-color: <omitted>
-                                  indent: 0
-                                  invisible: false
-                                  justification: left
-                                  language: <omitted>
-                                  left-margin: 0
-                                  pixels-above-lines: 0
-                                  pixels-below-lines: 0
-                                  pixels-inside-wrap: 0
-                                  right-margin: 0
-                                  rise: 0
-                                  scale: 1
-                                  size: <omitted>
-                                  stretch: <omitted>
-                                  strikethrough: false
-                                  style: <omitted>
-                                  underline: none
-                                  variant: <omitted>
-                                  weight: <omitted>
-                                  wrap-mode: word
-          unnamed-GtkContainerAccessible-14
-            "filler"
-            parent: unnamed-GtkContainerAccessible-10
-            index: 1
-            state: enabled sensitive vertical
-            toolkit: gtk
-            <AtkComponent>
-            layer: widget
-            alpha: 1
-            Palette:
-              "label"
-              parent: unnamed-GtkContainerAccessible-14
-              index: 0
-              name: Palette:
-              label-for: unnamed-GtkWidgetAccessible-15
-              state: enabled multi-line sensitive visible
-              toolkit: gtk
-              <AtkComponent>
-              layer: widget
-              alpha: 1
-              <AtkText>
-              text: Palette:
-              character count: 8
-              caret offset: 0
-              default attributes: bg-color: <omitted>
-                                  bg-full-height: 0
-                                  direction: <omitted>
-                                  editable: false
-                                  family-name: <omitted>
-                                  fg-color: <omitted>
-                                  indent: 0
-                                  invisible: false
-                                  justification: left
-                                  language: <omitted>
-                                  left-margin: 0
-                                  pixels-above-lines: 0
-                                  pixels-below-lines: 0
-                                  pixels-inside-wrap: 0
-                                  right-margin: 0
-                                  rise: 0
-                                  scale: 1
-                                  size: <omitted>
-                                  stretch: <omitted>
-                                  strikethrough: false
-                                  style: <omitted>
-                                  underline: none
-                                  variant: <omitted>
-                                  weight: <omitted>
-                                  wrap-mode: word
-            unnamed-GtkContainerAccessible-16
-              "panel"
-              parent: unnamed-GtkContainerAccessible-14
-              index: 1
-              state: enabled horizontal sensitive visible
-              toolkit: gtk
-              <AtkComponent>
-              layer: widget
-              alpha: 1
-              unnamed-GtkFrameAccessible-17
-                "panel"
-                parent: unnamed-GtkContainerAccessible-16
-                index: 0
-                state: enabled sensitive visible
-                toolkit: gtk
-                <AtkComponent>
-                layer: widget
-                alpha: 1
-                unnamed-GtkWidgetAccessible-18
-                  "unknown"
-                  parent: unnamed-GtkFrameAccessible-17
-                  index: 0
-                  description: Click this palette entry to make it the current color. To change this entry, drag a color swatch here or right-click it and select "Save color here."
-                  state: enabled focusable sensitive visible
-                  toolkit: gtk
-                  <AtkComponent>
-                  layer: widget
-                  alpha: 1
-              unnamed-GtkFrameAccessible-19
-                "panel"
-                parent: unnamed-GtkContainerAccessible-16
-                index: 1
-                state: enabled sensitive visible
-                toolkit: gtk
-                <AtkComponent>
-                layer: widget
-                alpha: 1
-                unnamed-GtkWidgetAccessible-20
-                  "unknown"
-                  parent: unnamed-GtkFrameAccessible-19
-                  index: 0
-                  description: Click this palette entry to make it the current color. To change this entry, drag a color swatch here or right-click it and select "Save color here."
-                  state: enabled focusable sensitive visible
-                  toolkit: gtk
-                  <AtkComponent>
-                  layer: widget
-                  alpha: 1
-              unnamed-GtkFrameAccessible-21
-                "panel"
-                parent: unnamed-GtkContainerAccessible-16
-                index: 2
-                state: enabled sensitive visible
-                toolkit: gtk
-                <AtkComponent>
-                layer: widget
-                alpha: 1
-                unnamed-GtkWidgetAccessible-22
-                  "unknown"
-                  parent: unnamed-GtkFrameAccessible-21
-                  index: 0
-                  description: Click this palette entry to make it the current color. To change this entry, drag a color swatch here or right-click it and select "Save color here."
-                  state: enabled focusable sensitive visible
-                  toolkit: gtk
-                  <AtkComponent>
-                  layer: widget
-                  alpha: 1
-              unnamed-GtkFrameAccessible-23
-                "panel"
-                parent: unnamed-GtkContainerAccessible-16
-                index: 3
-                state: enabled sensitive visible
-                toolkit: gtk
-                <AtkComponent>
-                layer: widget
-                alpha: 1
-                unnamed-GtkWidgetAccessible-24
-                  "unknown"
-                  parent: unnamed-GtkFrameAccessible-23
-                  index: 0
-                  description: Click this palette entry to make it the current color. To change this entry, drag a color swatch here or right-click it and select "Save color here."
-                  state: enabled focusable sensitive visible
-                  toolkit: gtk
-                  <AtkComponent>
-                  layer: widget
-                  alpha: 1
-              unnamed-GtkFrameAccessible-25
-                "panel"
-                parent: unnamed-GtkContainerAccessible-16
-                index: 4
-                state: enabled sensitive visible
-                toolkit: gtk
-                <AtkComponent>
-                layer: widget
-                alpha: 1
-                unnamed-GtkWidgetAccessible-26
-                  "unknown"
-                  parent: unnamed-GtkFrameAccessible-25
-                  index: 0
-                  description: Click this palette entry to make it the current color. To change this entry, drag a color swatch here or right-click it and select "Save color here."
-                  state: enabled focusable sensitive visible
-                  toolkit: gtk
-                  <AtkComponent>
-                  layer: widget
-                  alpha: 1
-              unnamed-GtkFrameAccessible-27
-                "panel"
-                parent: unnamed-GtkContainerAccessible-16
-                index: 5
-                state: enabled sensitive visible
-                toolkit: gtk
-                <AtkComponent>
-                layer: widget
-                alpha: 1
-                unnamed-GtkWidgetAccessible-28
-                  "unknown"
-                  parent: unnamed-GtkFrameAccessible-27
-                  index: 0
-                  description: Click this palette entry to make it the current color. To change this entry, drag a color swatch here or right-click it and select "Save color here."
-                  state: enabled focusable sensitive visible
-                  toolkit: gtk
-                  <AtkComponent>
-                  layer: widget
-                  alpha: 1
-              unnamed-GtkFrameAccessible-29
-                "panel"
-                parent: unnamed-GtkContainerAccessible-16
-                index: 6
-                state: enabled sensitive visible
-                toolkit: gtk
-                <AtkComponent>
-                layer: widget
-                alpha: 1
-                unnamed-GtkWidgetAccessible-30
-                  "unknown"
-                  parent: unnamed-GtkFrameAccessible-29
-                  index: 0
-                  description: Click this palette entry to make it the current color. To change this entry, drag a color swatch here or right-click it and select "Save color here."
-                  state: enabled focusable sensitive visible
-                  toolkit: gtk
-                  <AtkComponent>
-                  layer: widget
-                  alpha: 1
-              unnamed-GtkFrameAccessible-31
-                "panel"
-                parent: unnamed-GtkContainerAccessible-16
-                index: 7
-                state: enabled sensitive visible
-                toolkit: gtk
-                <AtkComponent>
-                layer: widget
-                alpha: 1
-                unnamed-GtkWidgetAccessible-32
-                  "unknown"
-                  parent: unnamed-GtkFrameAccessible-31
-                  index: 0
-                  description: Click this palette entry to make it the current color. To change this entry, drag a color swatch here or right-click it and select "Save color here."
-                  state: enabled focusable sensitive visible
-                  toolkit: gtk
-                  <AtkComponent>
-                  layer: widget
-                  alpha: 1
-              unnamed-GtkFrameAccessible-33
-                "panel"
-                parent: unnamed-GtkContainerAccessible-16
-                index: 8
-                state: enabled sensitive visible
-                toolkit: gtk
-                <AtkComponent>
-                layer: widget
-                alpha: 1
-                unnamed-GtkWidgetAccessible-34
-                  "unknown"
-                  parent: unnamed-GtkFrameAccessible-33
-                  index: 0
-                  description: Click this palette entry to make it the current color. To change this entry, drag a color swatch here or right-click it and select "Save color here."
-                  state: enabled focusable sensitive visible
-                  toolkit: gtk
-                  <AtkComponent>
-                  layer: widget
-                  alpha: 1
-              unnamed-GtkFrameAccessible-35
-                "panel"
-                parent: unnamed-GtkContainerAccessible-16
-                index: 9
-                state: enabled sensitive visible
-                toolkit: gtk
-                <AtkComponent>
-                layer: widget
-                alpha: 1
-                unnamed-GtkWidgetAccessible-36
-                  "unknown"
-                  parent: unnamed-GtkFrameAccessible-35
-                  index: 0
-                  description: Click this palette entry to make it the current color. To change this entry, drag a color swatch here or right-click it and select "Save color here."
-                  state: enabled focusable sensitive visible
-                  toolkit: gtk
-                  <AtkComponent>
-                  layer: widget
-                  alpha: 1
-              unnamed-GtkFrameAccessible-37
-                "panel"
-                parent: unnamed-GtkContainerAccessible-16
-                index: 10
-                state: enabled sensitive visible
-                toolkit: gtk
-                <AtkComponent>
-                layer: widget
-                alpha: 1
-                unnamed-GtkWidgetAccessible-38
-                  "unknown"
-                  parent: unnamed-GtkFrameAccessible-37
-                  index: 0
-                  description: Click this palette entry to make it the current color. To change this entry, drag a color swatch here or right-click it and select "Save color here."
-                  state: enabled focusable sensitive visible
-                  toolkit: gtk
-                  <AtkComponent>
-                  layer: widget
-                  alpha: 1
-              unnamed-GtkFrameAccessible-39
-                "panel"
-                parent: unnamed-GtkContainerAccessible-16
-                index: 11
-                state: enabled sensitive visible
-                toolkit: gtk
-                <AtkComponent>
-                layer: widget
-                alpha: 1
-                unnamed-GtkWidgetAccessible-40
-                  "unknown"
-                  parent: unnamed-GtkFrameAccessible-39
-                  index: 0
-                  description: Click this palette entry to make it the current color. To change this entry, drag a color swatch here or right-click it and select "Save color here."
-                  state: enabled focusable sensitive visible
-                  toolkit: gtk
-                  <AtkComponent>
-                  layer: widget
-                  alpha: 1
-              unnamed-GtkFrameAccessible-41
-                "panel"
-                parent: unnamed-GtkContainerAccessible-16
-                index: 12
-                state: enabled sensitive visible
-                toolkit: gtk
-                <AtkComponent>
-                layer: widget
-                alpha: 1
-                unnamed-GtkWidgetAccessible-42
-                  "unknown"
-                  parent: unnamed-GtkFrameAccessible-41
-                  index: 0
-                  description: Click this palette entry to make it the current color. To change this entry, drag a color swatch here or right-click it and select "Save color here."
-                  state: enabled focusable sensitive visible
-                  toolkit: gtk
-                  <AtkComponent>
-                  layer: widget
-                  alpha: 1
-              unnamed-GtkFrameAccessible-43
-                "panel"
-                parent: unnamed-GtkContainerAccessible-16
-                index: 13
-                state: enabled sensitive visible
-                toolkit: gtk
-                <AtkComponent>
-                layer: widget
-                alpha: 1
-                unnamed-GtkWidgetAccessible-44
-                  "unknown"
-                  parent: unnamed-GtkFrameAccessible-43
-                  index: 0
-                  description: Click this palette entry to make it the current color. To change this entry, drag a color swatch here or right-click it and select "Save color here."
-                  state: enabled focusable sensitive visible
-                  toolkit: gtk
-                  <AtkComponent>
-                  layer: widget
-                  alpha: 1
-              unnamed-GtkFrameAccessible-45
-                "panel"
-                parent: unnamed-GtkContainerAccessible-16
-                index: 14
-                state: enabled sensitive visible
-                toolkit: gtk
-                <AtkComponent>
-                layer: widget
-                alpha: 1
-                unnamed-GtkWidgetAccessible-46
-                  "unknown"
-                  parent: unnamed-GtkFrameAccessible-45
-                  index: 0
-                  description: Click this palette entry to make it the current color. To change this entry, drag a color swatch here or right-click it and select "Save color here."
-                  state: enabled focusable sensitive visible
-                  toolkit: gtk
-                  <AtkComponent>
-                  layer: widget
-                  alpha: 1
-              unnamed-GtkFrameAccessible-47
-                "panel"
-                parent: unnamed-GtkContainerAccessible-16
-                index: 15
-                state: enabled sensitive visible
-                toolkit: gtk
-                <AtkComponent>
-                layer: widget
-                alpha: 1
-                unnamed-GtkWidgetAccessible-48
-                  "unknown"
-                  parent: unnamed-GtkFrameAccessible-47
-                  index: 0
-                  description: Click this palette entry to make it the current color. To change this entry, drag a color swatch here or right-click it and select "Save color here."
-                  state: enabled focusable sensitive visible
-                  toolkit: gtk
-                  <AtkComponent>
-                  layer: widget
-                  alpha: 1
-              unnamed-GtkFrameAccessible-49
-                "panel"
-                parent: unnamed-GtkContainerAccessible-16
-                index: 16
-                state: enabled sensitive visible
-                toolkit: gtk
-                <AtkComponent>
-                layer: widget
-                alpha: 1
-                unnamed-GtkWidgetAccessible-50
-                  "unknown"
-                  parent: unnamed-GtkFrameAccessible-49
-                  index: 0
-                  description: Click this palette entry to make it the current color. To change this entry, drag a color swatch here or right-click it and select "Save color here."
-                  state: enabled focusable sensitive visible
-                  toolkit: gtk
-                  <AtkComponent>
-                  layer: widget
-                  alpha: 1
-              unnamed-GtkFrameAccessible-51
-                "panel"
-                parent: unnamed-GtkContainerAccessible-16
-                index: 17
-                state: enabled sensitive visible
-                toolkit: gtk
-                <AtkComponent>
-                layer: widget
-                alpha: 1
-                unnamed-GtkWidgetAccessible-52
-                  "unknown"
-                  parent: unnamed-GtkFrameAccessible-51
-                  index: 0
-                  description: Click this palette entry to make it the current color. To change this entry, drag a color swatch here or right-click it and select "Save color here."
-                  state: enabled focusable sensitive visible
-                  toolkit: gtk
-                  <AtkComponent>
-                  layer: widget
-                  alpha: 1
-              unnamed-GtkFrameAccessible-53
-                "panel"
-                parent: unnamed-GtkContainerAccessible-16
-                index: 18
-                state: enabled sensitive visible
-                toolkit: gtk
-                <AtkComponent>
-                layer: widget
-                alpha: 1
-                unnamed-GtkWidgetAccessible-54
-                  "unknown"
-                  parent: unnamed-GtkFrameAccessible-53
-                  index: 0
-                  description: Click this palette entry to make it the current color. To change this entry, drag a color swatch here or right-click it and select "Save color here."
-                  state: enabled focusable sensitive visible
-                  toolkit: gtk
-                  <AtkComponent>
-                  layer: widget
-                  alpha: 1
-              unnamed-GtkFrameAccessible-55
-                "panel"
-                parent: unnamed-GtkContainerAccessible-16
-                index: 19
-                state: enabled sensitive visible
-                toolkit: gtk
-                <AtkComponent>
-                layer: widget
-                alpha: 1
-                unnamed-GtkWidgetAccessible-15
-                  "unknown"
-                  parent: unnamed-GtkFrameAccessible-55
-                  index: 0
-                  description: Click this palette entry to make it the current color. To change this entry, drag a color swatch here or right-click it and select "Save color here."
-                  labelled-by: Palette:
-                  state: enabled focusable sensitive visible
-                  toolkit: gtk
-                  <AtkComponent>
-                  layer: widget
-                  alpha: 1
-    action_area
-      "filler"
-      parent: vbox
-      index: 1
-      state: enabled horizontal sensitive showing visible
-      toolkit: gtk
-      <AtkComponent>
-      layer: widget
-      alpha: 1
-      unnamed-GtkButtonAccessible-56
-        "push button"
-        parent: action_area
-        index: 0
-        name: Help
-        state: enabled focusable sensitive
-        toolkit: gtk
-        <AtkComponent>
-        layer: widget
-        alpha: 1
-        <AtkImage>
-        image size: 20 x 20
-        image description: (null)
-        <AtkAction>
-        action 0 name: click
-        action 0 description: Clicks the button
-        action 0 keybinding: <Alt>h
-      unnamed-GtkButtonAccessible-57
-        "push button"
-        parent: action_area
-        index: 1
-        name: Select
-        state: enabled focusable sensitive showing visible default
-        toolkit: gtk
-        <AtkComponent>
-        layer: widget
-        alpha: 1
-        <AtkImage>
-        image size: -1 x -1
-        image description: (null)
-        <AtkAction>
-        action 0 name: click
-        action 0 description: Clicks the button
-        action 0 keybinding: <Alt>s
-      unnamed-GtkButtonAccessible-58
-        "push button"
-        parent: action_area
-        index: 2
-        name: Cancel
-        state: enabled focusable sensitive showing visible
-        toolkit: gtk
-        <AtkComponent>
-        layer: widget
-        alpha: 1
-        <AtkImage>
-        image size: 20 x 20
-        image description: (null)
-        <AtkAction>
-        action 0 name: click
-        action 0 description: Clicks the button
-        action 0 keybinding: <Alt>c
diff --git a/tests/a11y/colorchooser.ui b/tests/a11y/colorchooser.ui
deleted file mode 100644 (file)
index c17f97d..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<interface>
-  <!-- interface-requires gtk+ 3.0 -->
-  <object class="GtkColorSelectionDialog" id="window1">
-  </object>
-</interface>
diff --git a/tests/a11y/combos.txt b/tests/a11y/combos.txt
deleted file mode 100644 (file)
index 7bcd8e0..0000000
+++ /dev/null
@@ -1,229 +0,0 @@
-window1
-  "window"
-  index: 0
-  state: enabled resizable sensitive showing visible
-  toolkit: gtk
-  <AtkComponent>
-  layer: window
-  alpha: 1
-  box1
-    "filler"
-    parent: window1
-    index: 0
-    state: enabled horizontal sensitive
-    toolkit: gtk
-    <AtkComponent>
-    layer: widget
-    alpha: 1
-    label1
-      "label"
-      parent: box1
-      index: 0
-      name: Combo:
-      label-for: combo1
-      state: enabled multi-line sensitive visible
-      toolkit: gtk
-      <AtkComponent>
-      layer: widget
-      alpha: 1
-      <AtkText>
-      text: Combo:
-      character count: 6
-      caret offset: 0
-      default attributes: bg-color: <omitted>
-                          bg-full-height: 0
-                          direction: <omitted>
-                          editable: false
-                          family-name: <omitted>
-                          fg-color: <omitted>
-                          indent: 0
-                          invisible: false
-                          justification: left
-                          language: <omitted>
-                          left-margin: 0
-                          pixels-above-lines: 0
-                          pixels-below-lines: 0
-                          pixels-inside-wrap: 0
-                          right-margin: 0
-                          rise: 0
-                          scale: 1
-                          size: <omitted>
-                          stretch: <omitted>
-                          strikethrough: false
-                          style: <omitted>
-                          underline: none
-                          variant: <omitted>
-                          weight: <omitted>
-                          wrap-mode: word
-    combo1
-      "combo box"
-      parent: box1
-      index: 1
-      labelled-by: label1
-      state: enabled sensitive visible
-      toolkit: gtk
-      <AtkComponent>
-      layer: widget
-      alpha: 1
-      <AtkAction>
-      action 0 name: press
-      action 0 description: Presses the combobox
-      action 0 keybinding: <Alt>c
-      unnamed-GtkMenuAccessible-0
-        "menu"
-        parent: combo1
-        index: 0
-        state: enabled sensitive
-        toolkit: gtk
-        <AtkComponent>
-        layer: popup
-        alpha: 1
-        <AtkSelection>
-    combo2
-      "combo box"
-      parent: box1
-      index: 2
-      state: enabled sensitive visible
-      toolkit: gtk
-      <AtkComponent>
-      layer: widget
-      alpha: 1
-      <AtkAction>
-      action 0 name: press
-      action 0 description: Presses the combobox
-      unnamed-GtkMenuAccessible-1
-        "menu"
-        parent: combo2
-        index: 0
-        state: enabled sensitive
-        toolkit: gtk
-        <AtkComponent>
-        layer: popup
-        alpha: 1
-        <AtkSelection>
-      
-        "text"
-        parent: combo2
-        index: 1
-        state: editable enabled focusable sensitive single-line visible
-        toolkit: gtk
-        <AtkComponent>
-        layer: widget
-        alpha: 1
-        <AtkText>
-        text: 
-        character count: 0
-        caret offset: 0
-        default attributes: bg-color: <omitted>
-                            bg-full-height: 0
-                            direction: <omitted>
-                            editable: false
-                            family-name: <omitted>
-                            fg-color: <omitted>
-                            indent: 0
-                            invisible: false
-                            justification: left
-                            language: <omitted>
-                            left-margin: 0
-                            pixels-above-lines: 0
-                            pixels-below-lines: 0
-                            pixels-inside-wrap: 0
-                            right-margin: 0
-                            rise: 0
-                            scale: 1
-                            size: <omitted>
-                            stretch: <omitted>
-                            strikethrough: false
-                            style: <omitted>
-                            underline: none
-                            variant: <omitted>
-                            weight: <omitted>
-                            wrap-mode: word
-        <AtkAction>
-        action 0 name: activate
-        action 0 description: Activates the entry
-    combo3
-      "combo box"
-      parent: box1
-      index: 3
-      state: enabled sensitive visible
-      toolkit: gtk
-      <AtkComponent>
-      layer: widget
-      alpha: 1
-      <AtkAction>
-      action 0 name: press
-      action 0 description: Presses the combobox
-      unnamed-GtkMenuAccessible-2
-        "menu"
-        parent: combo3
-        index: 0
-        state: enabled sensitive
-        toolkit: gtk
-        <AtkComponent>
-        layer: popup
-        alpha: 1
-        <AtkSelection>
-    combo4
-      "combo box"
-      parent: box1
-      index: 4
-      state: enabled sensitive visible
-      toolkit: gtk
-      <AtkComponent>
-      layer: widget
-      alpha: 1
-      <AtkAction>
-      action 0 name: press
-      action 0 description: Presses the combobox
-      unnamed-GtkMenuAccessible-3
-        "menu"
-        parent: combo4
-        index: 0
-        state: enabled sensitive
-        toolkit: gtk
-        <AtkComponent>
-        layer: popup
-        alpha: 1
-        <AtkSelection>
-      
-        "text"
-        parent: combo4
-        index: 1
-        state: editable enabled focusable sensitive single-line visible
-        toolkit: gtk
-        <AtkComponent>
-        layer: widget
-        alpha: 1
-        <AtkText>
-        text: 
-        character count: 0
-        caret offset: 0
-        default attributes: bg-color: <omitted>
-                            bg-full-height: 0
-                            direction: <omitted>
-                            editable: false
-                            family-name: <omitted>
-                            fg-color: <omitted>
-                            indent: 0
-                            invisible: false
-                            justification: left
-                            language: <omitted>
-                            left-margin: 0
-                            pixels-above-lines: 0
-                            pixels-below-lines: 0
-                            pixels-inside-wrap: 0
-                            right-margin: 0
-                            rise: 0
-                            scale: 1
-                            size: <omitted>
-                            stretch: <omitted>
-                            strikethrough: false
-                            style: <omitted>
-                            underline: none
-                            variant: <omitted>
-                            weight: <omitted>
-                            wrap-mode: word
-        <AtkAction>
-        action 0 name: activate
-        action 0 description: Activates the entry
diff --git a/tests/a11y/combos.ui b/tests/a11y/combos.ui
deleted file mode 100644 (file)
index 8ad2416..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<interface>
-  <!-- interface-requires gtk+ 3.0 -->
-  <object class="GtkWindow" id="window1">
-    <property name="can_focus">False</property>
-    <property name="type">popup</property>
-    <child>
-      <object class="GtkBox" id="box1">
-        <child>
-          <object class="GtkLabel" id="label1">
-            <property name="visible">True</property>
-            <property name="label">_Combo:</property>
-            <property name="use-underline">True</property>
-            <property name="mnemonic-widget">combo1</property>
-          </object>
-        </child>
-        <child>
-          <object class="GtkComboBox" id="combo1">
-            <property name="visible">True</property>
-          </object>
-        </child>
-        <child>
-          <object class="GtkComboBox" id="combo2">
-            <property name="visible">True</property>
-            <property name="has-entry">True</property>
-          </object>
-        </child>
-        <child>
-          <object class="GtkComboBoxText" id="combo3">
-            <property name="visible">True</property>
-          </object>
-        </child>
-        <child>
-          <object class="GtkComboBoxText" id="combo4">
-            <property name="visible">True</property>
-            <property name="has-entry">True</property>
-          </object>
-        </child>
-      </object>
-    </child>
-  </object>
-</interface>
diff --git a/tests/a11y/derive.c b/tests/a11y/derive.c
deleted file mode 100644 (file)
index 6ecb47c..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * Copyright (C) 2012 Red Hat Inc.
- *
- * Author:
- *      Matthias Clasen <mclasen@redhat.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include <gtk/gtk.h>
-#include <gtk/gtk-a11y.h>
-
-/* Implement a (trivial) GtkButton subclass, derive GtkButtonAccessible
- * and use the derived accessible for our new button.
- */
-
-typedef GtkButtonAccessible MyButtonAccessible;
-typedef GtkButtonAccessibleClass MyButtonAccessibleClass;
-
-G_DEFINE_TYPE (MyButtonAccessible, my_button_accessible, GTK_TYPE_BUTTON_ACCESSIBLE)
-
-static void
-my_button_accessible_init (MyButtonAccessible *a)
-{
-}
-
-static void
-my_button_accessible_class_init (MyButtonAccessibleClass *class)
-{
-}
-
-typedef GtkButton MyButton;
-typedef GtkButtonClass MyButtonClass;
-
-G_DEFINE_TYPE (MyButton, my_button, GTK_TYPE_BUTTON)
-
-static void
-my_button_init (MyButton *b)
-{
-}
-
-static void
-my_button_class_init (MyButtonClass *class)
-{
-  gtk_widget_class_set_accessible_type (GTK_WIDGET_CLASS (class),
-                                        my_button_accessible_get_type ());
-}
-
-int main (int argc, char *argv[])
-{
-  GtkWidget *widget;
-  GtkAccessible *accessible;
-
-  gtk_init (NULL, NULL);
-
-  widget = GTK_WIDGET (g_object_new (my_button_get_type (), NULL));
-  accessible = GTK_ACCESSIBLE (gtk_widget_get_accessible (widget));
-
-  g_assert (G_TYPE_CHECK_INSTANCE_TYPE (accessible, my_button_accessible_get_type ()));
-
-  return 0;
-}
diff --git a/tests/a11y/entries.txt b/tests/a11y/entries.txt
deleted file mode 100644 (file)
index 657a3f3..0000000
+++ /dev/null
@@ -1,330 +0,0 @@
-window1
-  "window"
-  index: 0
-  state: enabled resizable sensitive showing visible
-  toolkit: gtk
-  <AtkComponent>
-  layer: window
-  alpha: 1
-  box1
-    "filler"
-    parent: window1
-    index: 0
-    state: enabled horizontal sensitive
-    toolkit: gtk
-    <AtkComponent>
-    layer: widget
-    alpha: 1
-    label1
-      "label"
-      parent: box1
-      index: 0
-      name: entry:
-      label-for: entry1
-      state: enabled multi-line sensitive visible
-      toolkit: gtk
-      <AtkComponent>
-      layer: widget
-      alpha: 1
-      <AtkText>
-      text: entry:
-      character count: 6
-      caret offset: 0
-      default attributes: bg-color: <omitted>
-                          bg-full-height: 0
-                          direction: <omitted>
-                          editable: false
-                          family-name: <omitted>
-                          fg-color: <omitted>
-                          indent: 0
-                          invisible: false
-                          justification: left
-                          language: <omitted>
-                          left-margin: 0
-                          pixels-above-lines: 0
-                          pixels-below-lines: 0
-                          pixels-inside-wrap: 0
-                          right-margin: 0
-                          rise: 0
-                          scale: 1
-                          size: <omitted>
-                          stretch: <omitted>
-                          strikethrough: false
-                          style: <omitted>
-                          underline: none
-                          variant: <omitted>
-                          weight: <omitted>
-                          wrap-mode: word
-    label2
-      "label"
-      parent: box1
-      index: 1
-      name: password entry:
-      label-for: entry2
-      state: enabled multi-line sensitive visible
-      toolkit: gtk
-      <AtkComponent>
-      layer: widget
-      alpha: 1
-      <AtkText>
-      text: password entry:
-      character count: 15
-      caret offset: 0
-      default attributes: bg-color: <omitted>
-                          bg-full-height: 0
-                          direction: <omitted>
-                          editable: false
-                          family-name: <omitted>
-                          fg-color: <omitted>
-                          indent: 0
-                          invisible: false
-                          justification: left
-                          language: <omitted>
-                          left-margin: 0
-                          pixels-above-lines: 0
-                          pixels-below-lines: 0
-                          pixels-inside-wrap: 0
-                          right-margin: 0
-                          rise: 0
-                          scale: 1
-                          size: <omitted>
-                          stretch: <omitted>
-                          strikethrough: false
-                          style: <omitted>
-                          underline: none
-                          variant: <omitted>
-                          weight: <omitted>
-                          wrap-mode: word
-    label3
-      "label"
-      parent: box1
-      index: 2
-      name: spinbutton:
-      label-for: spinbutton1
-      state: enabled multi-line sensitive visible
-      toolkit: gtk
-      <AtkComponent>
-      layer: widget
-      alpha: 1
-      <AtkText>
-      text: spinbutton:
-      character count: 11
-      caret offset: 0
-      default attributes: bg-color: <omitted>
-                          bg-full-height: 0
-                          direction: <omitted>
-                          editable: false
-                          family-name: <omitted>
-                          fg-color: <omitted>
-                          indent: 0
-                          invisible: false
-                          justification: left
-                          language: <omitted>
-                          left-margin: 0
-                          pixels-above-lines: 0
-                          pixels-below-lines: 0
-                          pixels-inside-wrap: 0
-                          right-margin: 0
-                          rise: 0
-                          scale: 1
-                          size: <omitted>
-                          stretch: <omitted>
-                          strikethrough: false
-                          style: <omitted>
-                          underline: none
-                          variant: <omitted>
-                          weight: <omitted>
-                          wrap-mode: word
-    entry1
-      "text"
-      parent: box1
-      index: 3
-      labelled-by: label1
-      state: editable enabled focusable sensitive single-line visible
-      toolkit: gtk
-      <AtkComponent>
-      layer: widget
-      alpha: 1
-      <AtkText>
-      text: text
-      character count: 4
-      caret offset: 0
-      default attributes: bg-color: <omitted>
-                          bg-full-height: 0
-                          direction: <omitted>
-                          editable: false
-                          family-name: <omitted>
-                          fg-color: <omitted>
-                          indent: 0
-                          invisible: false
-                          justification: left
-                          language: <omitted>
-                          left-margin: 0
-                          pixels-above-lines: 0
-                          pixels-below-lines: 0
-                          pixels-inside-wrap: 0
-                          right-margin: 0
-                          rise: 0
-                          scale: 1
-                          size: <omitted>
-                          stretch: <omitted>
-                          strikethrough: false
-                          style: <omitted>
-                          underline: none
-                          variant: <omitted>
-                          weight: <omitted>
-                          wrap-mode: word
-      <AtkAction>
-      action 0 name: activate
-      action 0 description: Activates the entry
-      action 0 keybinding: <Alt>e
-    entry2
-      "password text"
-      parent: box1
-      index: 4
-      labelled-by: label2
-      state: editable enabled focusable sensitive single-line visible
-      toolkit: gtk
-      <AtkComponent>
-      layer: widget
-      alpha: 1
-      <AtkText>
-      text: *************
-      character count: 13
-      caret offset: 0
-      default attributes: bg-color: <omitted>
-                          bg-full-height: 0
-                          direction: <omitted>
-                          editable: false
-                          family-name: <omitted>
-                          fg-color: <omitted>
-                          indent: 0
-                          invisible: false
-                          justification: left
-                          language: <omitted>
-                          left-margin: 0
-                          pixels-above-lines: 0
-                          pixels-below-lines: 0
-                          pixels-inside-wrap: 0
-                          right-margin: 0
-                          rise: 0
-                          scale: 1
-                          size: <omitted>
-                          stretch: <omitted>
-                          strikethrough: false
-                          style: <omitted>
-                          underline: none
-                          variant: <omitted>
-                          weight: <omitted>
-                          wrap-mode: word
-      <AtkAction>
-      action 0 name: activate
-      action 0 description: Activates the entry
-      action 0 keybinding: <Alt>p
-    entry3
-      "text"
-      parent: box1
-      index: 5
-      state: editable enabled focusable sensitive single-line visible
-      toolkit: gtk
-      <AtkComponent>
-      layer: widget
-      alpha: 1
-      <AtkText>
-      text: icons
-      character count: 5
-      caret offset: 0
-      default attributes: bg-color: <omitted>
-                          bg-full-height: 0
-                          direction: <omitted>
-                          editable: false
-                          family-name: <omitted>
-                          fg-color: <omitted>
-                          indent: 0
-                          invisible: false
-                          justification: left
-                          language: <omitted>
-                          left-margin: 0
-                          pixels-above-lines: 0
-                          pixels-below-lines: 0
-                          pixels-inside-wrap: 0
-                          right-margin: 0
-                          rise: 0
-                          scale: 1
-                          size: <omitted>
-                          stretch: <omitted>
-                          strikethrough: false
-                          style: <omitted>
-                          underline: none
-                          variant: <omitted>
-                          weight: <omitted>
-                          wrap-mode: word
-      <AtkAction>
-      action 0 name: activate
-      action 0 description: Activates the entry
-      unnamed-GtkEntryIconAccessible-0
-        "icon"
-        parent: entry3
-        state: enabled sensitive visible
-        <AtkComponent>
-        layer: widget
-        alpha: 1
-        <AtkAction>
-        action 0 name: activate
-      unnamed-GtkEntryIconAccessible-1
-        "icon"
-        parent: entry3
-        state: enabled sensitive visible
-        <AtkComponent>
-        layer: widget
-        alpha: 1
-        <AtkAction>
-        action 0 name: activate
-    spinbutton1
-      "spin button"
-      parent: box1
-      index: 6
-      labelled-by: label3
-      state: editable enabled focusable horizontal sensitive single-line visible
-      toolkit: gtk
-      <AtkComponent>
-      layer: widget
-      alpha: 1
-      <AtkText>
-      text: 
-      character count: 0
-      caret offset: 0
-      default attributes: bg-color: <omitted>
-                          bg-full-height: 0
-                          direction: <omitted>
-                          editable: false
-                          family-name: <omitted>
-                          fg-color: <omitted>
-                          indent: 0
-                          invisible: false
-                          justification: left
-                          language: <omitted>
-                          left-margin: 0
-                          pixels-above-lines: 0
-                          pixels-below-lines: 0
-                          pixels-inside-wrap: 0
-                          right-margin: 0
-                          rise: 0
-                          scale: 1
-                          size: <omitted>
-                          stretch: <omitted>
-                          strikethrough: false
-                          style: <omitted>
-                          underline: none
-                          variant: <omitted>
-                          weight: <omitted>
-                          wrap-mode: word
-      <AtkAction>
-      action 0 name: activate
-      action 0 description: Activates the entry
-      action 0 keybinding: <Alt>s
-      <AtkValue>
-      minimum value: 0.500000
-      maximum value: 99.500000
-      current value: 45.500000
-      minimum increment: 0.500000
diff --git a/tests/a11y/entries.ui b/tests/a11y/entries.ui
deleted file mode 100644 (file)
index 280d3bc..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<interface>
-  <!-- interface-requires gtk+ 3.0 -->
-  <object class="GtkAdjustment" id="adjustment1">
-    <property name="lower">0.5</property>
-    <property name="upper">99.5</property>
-    <property name="page-size">0</property>
-    <property name="value">45.5</property>
-    <property name="step-increment">0.5</property>
-    <property name="page-increment">5.0</property>
-  </object>
-  <object class="GtkWindow" id="window1">
-    <property name="can_focus">False</property>
-    <property name="type">popup</property>
-    <child>
-      <object class="GtkBox" id="box1">
-        <child>
-          <object class="GtkLabel" id="label1">
-            <property name="label">_entry:</property>
-            <property name="visible">True</property>
-            <property name="use-underline">True</property>
-            <property name="mnemonic-widget">entry1</property>
-          </object>
-        </child>
-        <child>
-          <object class="GtkLabel" id="label2">
-            <property name="label">_password entry:</property>
-            <property name="visible">True</property>
-            <property name="use-underline">True</property>
-            <property name="mnemonic-widget">entry2</property>
-          </object>
-        </child>
-        <child>
-          <object class="GtkLabel" id="label3">
-            <property name="label">_spinbutton:</property>
-            <property name="visible">True</property>
-            <property name="use-underline">True</property>
-            <property name="mnemonic-widget">spinbutton1</property>
-          </object>
-        </child>
-        <child>
-          <object class="GtkEntry" id="entry1">
-            <property name="text" translatable="yes">text</property>
-            <property name="visible">True</property>
-          </object>
-        </child>
-        <child>
-          <object class="GtkEntry" id="entry2">
-            <property name="text" translatable="yes">password text</property>
-            <property name="visible">True</property>
-            <property name="visibility">False</property>
-            <property name="invisible_char">*</property>
-            <property name="invisible_char_set">True</property>
-          </object>
-        </child>
-        <child>
-          <object class="GtkEntry" id="entry3">
-            <property name="text" translatable="yes">icons</property>
-            <property name="visible">True</property>
-            <property name="primary-icon-stock">stock1</property>
-            <property name="secondary-icon-stock">stock2</property>
-          </object>
-        </child>
-        <child>
-          <object class="GtkSpinButton" id="spinbutton1">
-            <property name="adjustment">adjustment1</property>
-            <property name="visible">True</property>
-          </object>
-        </child>
-      </object>
-    </child>
-  </object>
-</interface>
diff --git a/tests/a11y/expander.txt b/tests/a11y/expander.txt
deleted file mode 100644 (file)
index 68b6c08..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-window1
-  "window"
-  index: 0
-  state: enabled resizable sensitive showing visible
-  toolkit: gtk
-  <AtkComponent>
-  layer: window
-  alpha: 1
-  expander1
-    "toggle button"
-    parent: window1
-    index: 0
-    name: Reveal this
-    state: enabled expandable focusable sensitive showing visible
-    toolkit: gtk
-    <AtkComponent>
-    layer: widget
-    alpha: 1
-    <AtkAction>
-    action 0 name: activate
-    action 0 description: Activates the expander
-    label1
-      "label"
-      parent: expander1
-      index: 0
-      name: Hello World!
-      state: enabled multi-line sensitive visible
-      toolkit: gtk
-      <AtkComponent>
-      layer: widget
-      alpha: 1
-      <AtkText>
-      text: Hello World!
-      character count: 12
-      caret offset: 0
-      default attributes: bg-color: <omitted>
-                          bg-full-height: 0
-                          direction: <omitted>
-                          editable: false
-                          family-name: <omitted>
-                          fg-color: <omitted>
-                          indent: 0
-                          invisible: false
-                          justification: left
-                          language: <omitted>
-                          left-margin: 0
-                          pixels-above-lines: 0
-                          pixels-below-lines: 0
-                          pixels-inside-wrap: 0
-                          right-margin: 0
-                          rise: 0
-                          scale: 1
-                          size: <omitted>
-                          stretch: <omitted>
-                          strikethrough: false
-                          style: <omitted>
-                          underline: none
-                          variant: <omitted>
-                          weight: <omitted>
-                          wrap-mode: word
diff --git a/tests/a11y/expander.ui b/tests/a11y/expander.ui
deleted file mode 100644 (file)
index a0baf67..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<interface>
-  <!-- interface-requires gtk+ 3.0 -->
-  <object class="GtkWindow" id="window1">
-    <property name="can_focus">False</property>
-    <property name="type">popup</property>
-    <child>
-      <object class="GtkExpander" id="expander1">
-        <property name="label" translatable="yes">Reveal this</property>
-        <property name="visible">True</property>
-        <child>
-          <object class="GtkLabel" id="label1">
-            <property name="label" translatable="yes">Hello World!</property>
-            <property name="visible">True</property>
-          </object>
-        </child>
-      </object>
-    </child>
-  </object>
-</interface>
diff --git a/tests/a11y/focus.c b/tests/a11y/focus.c
deleted file mode 100644 (file)
index 1b83ea6..0000000
+++ /dev/null
@@ -1,126 +0,0 @@
-/*
- * Copyright (C) 2011 Red Hat Inc.
- *
- * Author:
- *      Matthias Clasen <mclasen@redhat.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include <gtk/gtk.h>
-#include <string.h>
-const gchar data[] =
-  "<interface>"
-  "  <object class='GtkWindow' id='window1'>"
-  "    <property name='visible'>True</property>"
-  "    <child>"
-  "      <object class='GtkBox' id='box1'>"
-  "        <property name='visible'>True</property>"
-  "        <child>"
-  "          <object class='GtkEntry' id='entry1'>"
-  "            <property name='visible'>True</property>"
-  "            <property name='text'>entry1</property>"
-  "          </object>"
-  "        </child>"
-  "        <child>"
-  "          <object class='GtkEntry' id='entry2'>"
-  "            <property name='visible'>True</property>"
-  "            <property name='text'>entry2</property>"
-  "          </object>"
-  "        </child>"
-  "      </object>"
-  "    </child>"
-  "  </object>"
-  "</interface>";
-
-static void
-got_active (GObject *win, GParamSpec *pspec, gpointer data)
-{
-  gtk_main_quit ();
-}
-
-static void
-test_focus_change (void)
-{
-  GtkBuilder *builder;
-  GError *error;
-  GtkWidget *window;
-  GtkWidget *entry1;
-  GtkWidget *entry2;
-  AtkObject *wa;
-  AtkObject *ea1;
-  AtkObject *ea2;
-  GtkWidget *focus;
-  AtkStateSet *set;
-  gboolean ret;
-
-  builder = gtk_builder_new ();
-  error = NULL;
-  gtk_builder_add_from_string (builder, data, -1, &error);
-  g_assert_no_error (error);
-  window = (GtkWidget*)gtk_builder_get_object (builder, "window1");
-  entry1 = (GtkWidget*)gtk_builder_get_object (builder, "entry1");
-  entry2 = (GtkWidget*)gtk_builder_get_object (builder, "entry2");
-
-  wa = gtk_widget_get_accessible (window);
-  ea1 = gtk_widget_get_accessible (entry1);
-  ea2 = gtk_widget_get_accessible (entry2);
-
-#if 0
-  g_signal_connect (window, "notify::is-active", G_CALLBACK (got_active), NULL);
-  gtk_widget_show (window);
-  gtk_main ();
-  g_assert (gtk_window_is_active (GTK_WINDOW (window)));
-#endif
-
-  focus = gtk_window_get_focus (GTK_WINDOW (window));
-  g_assert (focus == entry1);
-
-  set = atk_object_ref_state_set (ea1);
-  ret = atk_state_set_contains_state (set, ATK_STATE_FOCUSED);
-  g_assert (ret);
-  g_object_unref (set);
-  set = atk_object_ref_state_set (ea2);
-  ret = atk_state_set_contains_state (set, ATK_STATE_FOCUSED);
-  g_assert (!ret);
-  g_object_unref (set);
-
-  gtk_widget_grab_focus (entry2);
-
-  focus = gtk_window_get_focus (GTK_WINDOW (window));
-  g_assert (focus == entry2);
-
-  set = atk_object_ref_state_set (ea1);
-  ret = atk_state_set_contains_state (set, ATK_STATE_FOCUSED);
-  g_assert (!ret);
-  g_object_unref (set);
-  set = atk_object_ref_state_set (ea2);
-  ret = atk_state_set_contains_state (set, ATK_STATE_FOCUSED);
-  g_assert (ret);
-  g_object_unref (set);
-
-  g_object_unref (builder);
-}
-
-
-int
-main (int argc, char *argv[])
-{
-  gtk_test_init (&argc, &argv, NULL);
-
-  g_test_add_func ("/focus/change", test_focus_change);
-
-  return g_test_run ();
-}
-
diff --git a/tests/a11y/hello-world.txt b/tests/a11y/hello-world.txt
deleted file mode 100644 (file)
index d20b0eb..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-window1
-  "window"
-  index: 0
-  state: enabled resizable sensitive showing visible
-  toolkit: gtk
-  <AtkComponent>
-  layer: window
-  alpha: 1
-  button1
-    "push button"
-    parent: window1
-    index: 0
-    name: Hello World!
-    state: enabled focusable sensitive showing visible
-    toolkit: gtk
-    <AtkComponent>
-    layer: widget
-    alpha: 1
-    <AtkImage>
-    image size: -1 x -1
-    image description: (null)
-    <AtkAction>
-    action 0 name: click
-    action 0 description: Clicks the button
diff --git a/tests/a11y/hello-world.ui b/tests/a11y/hello-world.ui
deleted file mode 100644 (file)
index 3dc8075..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<interface>
-  <!-- interface-requires gtk+ 3.0 -->
-  <object class="GtkWindow" id="window1">
-    <property name="can_focus">False</property>
-    <property name="type">popup</property>
-    <child>
-      <object class="GtkButton" id="button1">
-        <property name="label" translatable="yes">Hello World!</property>
-        <property name="visible">True</property>
-        <property name="can_focus">True</property>
-        <property name="receives_default">True</property>
-        <property name="use_action_appearance">False</property>
-      </object>
-    </child>
-  </object>
-</interface>
diff --git a/tests/a11y/iconview.txt b/tests/a11y/iconview.txt
deleted file mode 100644 (file)
index c71c8e0..0000000
+++ /dev/null
@@ -1,90 +0,0 @@
-window1
-  "window"
-  index: 0
-  state: enabled resizable sensitive showing visible
-  toolkit: gtk
-  <AtkComponent>
-  layer: window
-  alpha: 1
-  iv1
-    "layered pane"
-    parent: window1
-    index: 0
-    state: enabled focusable sensitive showing visible
-    toolkit: gtk
-    <AtkComponent>
-    layer: widget
-    alpha: 1
-    <AtkSelection>
-    One
-      "icon"
-      parent: iv1
-      index: 0
-      state: enabled focusable selectable sensitive showing visible
-      <AtkComponent>
-      layer: widget
-      alpha: 1
-      <AtkText>
-      text: One
-      character count: 3
-      caret offset: 0
-      <AtkImage>
-      image size: 0 x 0
-      image description: (null)
-      <AtkAction>
-      action 0 name: activate
-      action 0 description: Activate item
-    Three
-      "icon"
-      parent: iv1
-      index: 1
-      state: enabled focusable selectable sensitive showing visible
-      <AtkComponent>
-      layer: widget
-      alpha: 1
-      <AtkText>
-      text: Three
-      character count: 5
-      caret offset: 0
-      <AtkImage>
-      image size: 0 x 0
-      image description: (null)
-      <AtkAction>
-      action 0 name: activate
-      action 0 description: Activate item
-    Five
-      "icon"
-      parent: iv1
-      index: 2
-      state: enabled focusable selectable sensitive showing visible
-      <AtkComponent>
-      layer: widget
-      alpha: 1
-      <AtkText>
-      text: Five
-      character count: 4
-      caret offset: 0
-      <AtkImage>
-      image size: 0 x 0
-      image description: (null)
-      <AtkAction>
-      action 0 name: activate
-      action 0 description: Activate item
-    Seven
-      "icon"
-      parent: iv1
-      index: 3
-      state: enabled focusable selectable sensitive showing visible
-      <AtkComponent>
-      layer: widget
-      alpha: 1
-      <AtkText>
-      text: Seven
-      character count: 5
-      caret offset: 0
-      <AtkImage>
-      image size: 0 x 0
-      image description: (null)
-      <AtkAction>
-      action 0 name: activate
-      action 0 description: Activate item
diff --git a/tests/a11y/iconview.ui b/tests/a11y/iconview.ui
deleted file mode 100644 (file)
index ba5d89c..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<interface>
-  <!-- interface-requires gtk+ 3.0 -->
-  <object class="GtkListStore" id="liststore1">
-    <columns>
-      <column type="gchararray"/>
-      <column type="gchararray"/>
-    </columns>
-    <data>
-      <row><col id="0">One</col><col id="1">Two</col></row>
-      <row><col id="0">Three</col><col id="1">Four</col></row>
-      <row><col id="0">Five</col><col id="1">Six</col></row>
-      <row><col id="0">Seven</col><col id="1">Eight</col></row>
-    </data>
-  </object>
-  <object class="GtkWindow" id="window1">
-    <property name="can_focus">False</property>
-    <property name="type">popup</property>
-    <child>
-      <object class="GtkIconView" id="iv1">
-        <property name="visible">True</property>
-        <property name="model">liststore1</property>
-        <child>
-          <object class="GtkCellRendererText" id="renderer1">
-          </object>
-          <attributes>
-            <attribute name="text">0</attribute>
-          </attributes>
-        </child>
-      </object>
-    </child>
-  </object>
-</interface>
diff --git a/tests/a11y/infobar.txt b/tests/a11y/infobar.txt
deleted file mode 100644 (file)
index 0fa016a..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-window1
-  "window"
-  index: 0
-  state: enabled resizable sensitive showing visible
-  toolkit: gtk
-  <AtkComponent>
-  layer: window
-  alpha: 1
-  bar1
-    "alert"
-    parent: window1
-    index: 0
-    name: Information
-    state: enabled horizontal sensitive showing visible
-    toolkit: gtk
-    <AtkComponent>
-    layer: widget
-    alpha: 1
-    box1
-      "filler"
-      parent: bar1
-      index: 0
-      state: enabled horizontal sensitive showing visible
-      toolkit: gtk
-      <AtkComponent>
-      layer: widget
-      alpha: 1
-      label1
-        "label"
-        parent: box1
-        index: 0
-        name: Some important info
-        state: enabled multi-line sensitive showing visible
-        toolkit: gtk
-        <AtkComponent>
-        layer: widget
-        alpha: 1
-        <AtkText>
-        text: Some important info
-        character count: 19
-        caret offset: 0
-        default attributes: bg-color: <omitted>
-                            bg-full-height: 0
-                            direction: <omitted>
-                            editable: false
-                            family-name: <omitted>
-                            fg-color: <omitted>
-                            indent: 0
-                            invisible: false
-                            justification: left
-                            language: <omitted>
-                            left-margin: 0
-                            pixels-above-lines: 0
-                            pixels-below-lines: 0
-                            pixels-inside-wrap: 0
-                            right-margin: 0
-                            rise: 0
-                            scale: 1
-                            size: <omitted>
-                            stretch: <omitted>
-                            strikethrough: false
-                            style: <omitted>
-                            underline: none
-                            variant: <omitted>
-                            weight: <omitted>
-                            wrap-mode: word
-    action_area
-      "filler"
-      parent: bar1
-      index: 1
-      state: enabled sensitive showing vertical visible
-      toolkit: gtk
-      <AtkComponent>
-      layer: widget
-      alpha: 1
diff --git a/tests/a11y/infobar.ui b/tests/a11y/infobar.ui
deleted file mode 100644 (file)
index a082198..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<interface>
-  <!-- interface-requires gtk+ 3.0 -->
-  <object class="GtkWindow" id="window1">
-    <property name="can_focus">False</property>
-    <property name="type">popup</property>
-    <child>
-      <object class="GtkInfoBar" id="bar1">
-        <property name="visible">True</property>
-        <property name="message-type">info</property>
-        <child internal-child="content_area">
-          <object class="GtkBox" id="box1">
-            <child>
-              <object class="GtkLabel" id="label1">
-                <property name="visible">True</property>
-                <property name="label" translatable="yes">Some important info</property>
-              </object>
-            </child>
-          </object>
-        </child>
-      </object>
-    </child>
-  </object>
-</interface>
diff --git a/tests/a11y/link.txt b/tests/a11y/link.txt
deleted file mode 100644 (file)
index c560183..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-window1
-  "window"
-  index: 0
-  state: enabled resizable sensitive showing visible
-  toolkit: gtk
-  <AtkComponent>
-  layer: window
-  alpha: 1
-  button1
-    "push button"
-    parent: window1
-    index: 0
-    name: Hello World!
-    state: enabled focusable sensitive showing visible
-    toolkit: gtk
-    <AtkComponent>
-    layer: widget
-    alpha: 1
-    <AtkImage>
-    image size: -1 x -1
-    image description: (null)
-    <AtkAction>
-    action 0 name: click
-    action 0 description: Clicks the button
-    <AtkHyperlinkImpl>
-    anchors: http://www.gtk.org
diff --git a/tests/a11y/link.ui b/tests/a11y/link.ui
deleted file mode 100644 (file)
index d8cff27..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<interface>
-  <!-- interface-requires gtk+ 3.0 -->
-  <object class="GtkWindow" id="window1">
-    <property name="can_focus">False</property>
-    <property name="type">popup</property>
-    <child>
-      <object class="GtkLinkButton" id="button1">
-        <property name="label" translatable="yes">Hello World!</property>
-        <property name="visible">True</property>
-        <property name="can_focus">True</property>
-        <property name="uri">http://www.gtk.org</property>
-      </object>
-    </child>
-  </object>
-</interface>
diff --git a/tests/a11y/lockbutton.txt b/tests/a11y/lockbutton.txt
deleted file mode 100644 (file)
index 845c6c8..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-window1
-  "window"
-  index: 0
-  state: enabled resizable sensitive showing visible
-  toolkit: gtk
-  <AtkComponent>
-  layer: window
-  alpha: 1
-  button1
-    "push button"
-    parent: window1
-    index: 0
-    name: Lock
-    description: Dialog is unlocked.
-Click to prevent further changes
-    state: enabled focusable sensitive showing visible
-    toolkit: gtk
-    <AtkComponent>
-    layer: widget
-    alpha: 1
-    <AtkImage>
-    image size: -1 x -1
-    image description: (null)
-    <AtkAction>
-    action 0 name: click
-    action 0 description: Clicks the button
diff --git a/tests/a11y/lockbutton.ui b/tests/a11y/lockbutton.ui
deleted file mode 100644 (file)
index 7df14c8..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<interface>
-  <!-- interface-requires gtk+ 3.0 -->
-  <object class="GtkWindow" id="window1">
-    <property name="can_focus">False</property>
-    <property name="type">popup</property>
-    <child>
-      <object class="GtkLockButton" id="button1">
-        <property name="visible">True</property>
-      </object>
-    </child>
-  </object>
-</interface>
diff --git a/tests/a11y/menu.txt b/tests/a11y/menu.txt
deleted file mode 100644 (file)
index 315fd91..0000000
+++ /dev/null
@@ -1,315 +0,0 @@
-window1
-  "frame"
-  index: 0
-  state: enabled resizable sensitive showing visible
-  toolkit: gtk
-  <AtkComponent>
-  layer: window
-  alpha: 1
-  menubar1
-    "menu bar"
-    parent: window1
-    index: 0
-    state: enabled sensitive showing visible
-    toolkit: gtk
-    <AtkComponent>
-    layer: widget
-    alpha: 1
-    <AtkSelection>
-    menuitem1
-      "menu"
-      parent: menubar1
-      index: 0
-      name: File
-      state: enabled selectable sensitive showing visible
-      toolkit: gtk
-      <AtkComponent>
-      layer: popup
-      alpha: 1
-      <AtkAction>
-      action 0 name: click
-      action 0 description: Clicks the menuitem
-      action 0 keybinding: <Alt>f;<Alt>f;
-      <AtkSelection>
-      imagemenuitem1
-        "menu item"
-        parent: menuitem1
-        index: 0
-        name: New
-        state: enabled selectable sensitive visible
-        toolkit: gtk
-        <AtkComponent>
-        layer: popup
-        alpha: 1
-        <AtkAction>
-        action 0 name: click
-        action 0 description: Clicks the menuitem
-        action 0 keybinding: n;<Alt>f:n;
-        <AtkSelection>
-      imagemenuitem2
-        "menu"
-        parent: menuitem1
-        index: 1
-        name: Open
-        state: enabled selectable sensitive visible
-        toolkit: gtk
-        <AtkComponent>
-        layer: popup
-        alpha: 1
-        <AtkAction>
-        action 0 name: click
-        action 0 description: Clicks the menuitem
-        action 0 keybinding: o;<Alt>f:o;
-        <AtkSelection>
-        radiomenuitem1
-          "radio menu item"
-          parent: imagemenuitem2
-          index: 0
-          name: One
-          member-of: radiomenuitem3
-                     radiomenuitem2
-                     radiomenuitem1
-          state: checked enabled selectable sensitive visible
-          toolkit: gtk
-          <AtkComponent>
-          layer: popup
-          alpha: 1
-          <AtkAction>
-          action 0 name: click
-          action 0 description: Clicks the menuitem
-          <AtkSelection>
-        radiomenuitem2
-          "radio menu item"
-          parent: imagemenuitem2
-          index: 1
-          name: Two
-          member-of: radiomenuitem3
-                     radiomenuitem2
-                     radiomenuitem1
-          state: enabled selectable sensitive visible
-          toolkit: gtk
-          <AtkComponent>
-          layer: popup
-          alpha: 1
-          <AtkAction>
-          action 0 name: click
-          action 0 description: Clicks the menuitem
-          <AtkSelection>
-        radiomenuitem3
-          "radio menu item"
-          parent: imagemenuitem2
-          index: 2
-          name: Three
-          member-of: radiomenuitem3
-                     radiomenuitem2
-                     radiomenuitem1
-          state: enabled selectable sensitive visible
-          toolkit: gtk
-          <AtkComponent>
-          layer: popup
-          alpha: 1
-          <AtkAction>
-          action 0 name: click
-          action 0 description: Clicks the menuitem
-          <AtkSelection>
-      imagemenuitem3
-        "menu item"
-        parent: menuitem1
-        index: 2
-        name: Save
-        state: enabled selectable sensitive visible
-        toolkit: gtk
-        <AtkComponent>
-        layer: popup
-        alpha: 1
-        <AtkAction>
-        action 0 name: click
-        action 0 description: Clicks the menuitem
-        action 0 keybinding: s;<Alt>f:s;
-        <AtkSelection>
-      imagemenuitem4
-        "menu item"
-        parent: menuitem1
-        index: 3
-        name: Save As
-        state: enabled selectable sensitive visible
-        toolkit: gtk
-        <AtkComponent>
-        layer: popup
-        alpha: 1
-        <AtkAction>
-        action 0 name: click
-        action 0 description: Clicks the menuitem
-        action 0 keybinding: a;<Alt>f:a;
-        <AtkSelection>
-      separatormenuitem1
-        "separator"
-        parent: menuitem1
-        index: 4
-        state: enabled selectable sensitive visible
-        toolkit: gtk
-        <AtkComponent>
-        layer: popup
-        alpha: 1
-        <AtkAction>
-        <AtkSelection>
-      checkmenuitem1
-        "check menu item"
-        parent: menuitem1
-        index: 5
-        name: awesome
-        state: selectable sensitive visible indeterminate
-        toolkit: gtk
-        <AtkComponent>
-        layer: popup
-        alpha: 1
-        <AtkAction>
-        action 0 name: click
-        action 0 description: Clicks the menuitem
-        <AtkSelection>
-      separatormenuitem2
-        "separator"
-        parent: menuitem1
-        index: 6
-        state: enabled selectable sensitive visible
-        toolkit: gtk
-        <AtkComponent>
-        layer: popup
-        alpha: 1
-        <AtkAction>
-        <AtkSelection>
-      imagemenuitem5
-        "menu item"
-        parent: menuitem1
-        index: 7
-        name: Quit
-        state: enabled selectable sensitive visible
-        toolkit: gtk
-        <AtkComponent>
-        layer: popup
-        alpha: 1
-        <AtkAction>
-        action 0 name: click
-        action 0 description: Clicks the menuitem
-        action 0 keybinding: q;<Alt>f:q;
-        <AtkSelection>
-    menuitem2
-      "menu"
-      parent: menubar1
-      index: 1
-      name: Edit
-      state: enabled selectable sensitive showing visible
-      toolkit: gtk
-      <AtkComponent>
-      layer: popup
-      alpha: 1
-      <AtkAction>
-      action 0 name: click
-      action 0 description: Clicks the menuitem
-      action 0 keybinding: <Alt>e;<Alt>e;
-      <AtkSelection>
-      imagemenuitem6
-        "menu item"
-        parent: menuitem2
-        index: 0
-        name: Cut
-        state: enabled selectable sensitive visible
-        toolkit: gtk
-        <AtkComponent>
-        layer: popup
-        alpha: 1
-        <AtkAction>
-        action 0 name: click
-        action 0 description: Clicks the menuitem
-        action 0 keybinding: t;<Alt>e:t;
-        <AtkSelection>
-      imagemenuitem7
-        "menu item"
-        parent: menuitem2
-        index: 1
-        name: Copy
-        state: enabled selectable sensitive visible
-        toolkit: gtk
-        <AtkComponent>
-        layer: popup
-        alpha: 1
-        <AtkAction>
-        action 0 name: click
-        action 0 description: Clicks the menuitem
-        action 0 keybinding: c;<Alt>e:c;
-        <AtkSelection>
-      imagemenuitem8
-        "menu item"
-        parent: menuitem2
-        index: 2
-        name: Paste
-        state: enabled selectable sensitive visible
-        toolkit: gtk
-        <AtkComponent>
-        layer: popup
-        alpha: 1
-        <AtkAction>
-        action 0 name: click
-        action 0 description: Clicks the menuitem
-        action 0 keybinding: p;<Alt>e:p;
-        <AtkSelection>
-      imagemenuitem9
-        "menu item"
-        parent: menuitem2
-        index: 3
-        name: Delete
-        state: enabled selectable sensitive visible
-        toolkit: gtk
-        <AtkComponent>
-        layer: popup
-        alpha: 1
-        <AtkAction>
-        action 0 name: click
-        action 0 description: Clicks the menuitem
-        action 0 keybinding: d;<Alt>e:d;
-        <AtkSelection>
-    menuitem3
-      "menu item"
-      parent: menubar1
-      index: 2
-      name: View
-      state: enabled selectable sensitive showing visible
-      toolkit: gtk
-      <AtkComponent>
-      layer: popup
-      alpha: 1
-      <AtkAction>
-      action 0 name: click
-      action 0 description: Clicks the menuitem
-      action 0 keybinding: <Alt>v;<Alt>v;
-      <AtkSelection>
-    menuitem4
-      "menu"
-      parent: menubar1
-      index: 3
-      name: Help
-      state: enabled selectable sensitive showing visible
-      toolkit: gtk
-      <AtkComponent>
-      layer: popup
-      alpha: 1
-      <AtkAction>
-      action 0 name: click
-      action 0 description: Clicks the menuitem
-      action 0 keybinding: <Alt>h;<Alt>h;
-      <AtkSelection>
-      imagemenuitem10
-        "menu item"
-        parent: menuitem4
-        index: 0
-        name: About
-        state: enabled selectable sensitive visible
-        toolkit: gtk
-        <AtkComponent>
-        layer: popup
-        alpha: 1
-        <AtkAction>
-        action 0 name: click
-        action 0 description: Clicks the menuitem
-        action 0 keybinding: a;<Alt>h:a;
-        <AtkSelection>
diff --git a/tests/a11y/menu.ui b/tests/a11y/menu.ui
deleted file mode 100644 (file)
index bb2274f..0000000
+++ /dev/null
@@ -1,230 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<interface>
-  <!-- interface-requires gtk+ 3.0 -->
-  <object class="GtkWindow" id="window1">
-    <property name="can_focus">False</property>
-    <child>
-      <object class="GtkMenuBar" id="menubar1">
-        <property name="visible">True</property>
-        <property name="can_focus">False</property>
-        <child>
-          <object class="GtkMenuItem" id="menuitem1">
-            <property name="visible">True</property>
-            <property name="can_focus">False</property>
-            <property name="use_action_appearance">False</property>
-            <property name="label" translatable="yes">_File</property>
-            <property name="use_underline">True</property>
-            <child type="submenu">
-              <object class="GtkMenu" id="menu1">
-                <property name="visible">True</property>
-                <property name="can_focus">False</property>
-                <child>
-                  <object class="GtkImageMenuItem" id="imagemenuitem1">
-                    <property name="label">gtk-new</property>
-                    <property name="visible">True</property>
-                    <property name="can_focus">False</property>
-                    <property name="use_action_appearance">False</property>
-                    <property name="use_underline">True</property>
-                    <property name="use_stock">True</property>
-                  </object>
-                </child>
-                <child>
-                  <object class="GtkImageMenuItem" id="imagemenuitem2">
-                    <property name="label">gtk-open</property>
-                    <property name="visible">True</property>
-                    <property name="can_focus">False</property>
-                    <property name="use_action_appearance">False</property>
-                    <property name="use_underline">True</property>
-                    <property name="use_stock">True</property>
-                    <child type="submenu">
-                      <object class="GtkMenu" id="menu4">
-                        <property name="visible">True</property>
-                        <property name="can_focus">False</property>
-                        <child>
-                          <object class="GtkRadioMenuItem" id="radiomenuitem1">
-                            <property name="visible">True</property>
-                            <property name="can_focus">False</property>
-                            <property name="use_action_appearance">False</property>
-                            <property name="label" translatable="yes">One</property>
-                            <property name="use_underline">True</property>
-                            <property name="active">True</property>
-                            <property name="draw_as_radio">True</property>
-                          </object>
-                        </child>
-                        <child>
-                          <object class="GtkRadioMenuItem" id="radiomenuitem2">
-                            <property name="visible">True</property>
-                            <property name="can_focus">False</property>
-                            <property name="use_action_appearance">False</property>
-                            <property name="label" translatable="yes">Two</property>
-                            <property name="use_underline">True</property>
-                            <property name="draw_as_radio">True</property>
-                            <property name="group">radiomenuitem1</property>
-                          </object>
-                        </child>
-                        <child>
-                          <object class="GtkRadioMenuItem" id="radiomenuitem3">
-                            <property name="visible">True</property>
-                            <property name="can_focus">False</property>
-                            <property name="use_action_appearance">False</property>
-                            <property name="label" translatable="yes">Three</property>
-                            <property name="use_underline">True</property>
-                            <property name="draw_as_radio">True</property>
-                            <property name="group">radiomenuitem1</property>
-                          </object>
-                        </child>
-                      </object>
-                    </child>
-                  </object>
-                </child>
-                <child>
-                  <object class="GtkImageMenuItem" id="imagemenuitem3">
-                    <property name="label">gtk-save</property>
-                    <property name="visible">True</property>
-                    <property name="can_focus">False</property>
-                    <property name="use_action_appearance">False</property>
-                    <property name="use_underline">True</property>
-                    <property name="use_stock">True</property>
-                  </object>
-                </child>
-                <child>
-                  <object class="GtkImageMenuItem" id="imagemenuitem4">
-                    <property name="label">gtk-save-as</property>
-                    <property name="visible">True</property>
-                    <property name="can_focus">False</property>
-                    <property name="use_action_appearance">False</property>
-                    <property name="use_underline">True</property>
-                    <property name="use_stock">True</property>
-                  </object>
-                </child>
-                <child>
-                  <object class="GtkSeparatorMenuItem" id="separatormenuitem1">
-                    <property name="visible">True</property>
-                    <property name="can_focus">False</property>
-                    <property name="use_action_appearance">False</property>
-                  </object>
-                </child>
-                <child>
-                  <object class="GtkCheckMenuItem" id="checkmenuitem1">
-                    <property name="visible">True</property>
-                    <property name="can_focus">False</property>
-                    <property name="use_action_appearance">False</property>
-                    <property name="label" translatable="yes">awesome</property>
-                    <property name="use_underline">True</property>
-                    <property name="inconsistent">True</property>
-                  </object>
-                </child>
-                <child>
-                  <object class="GtkSeparatorMenuItem" id="separatormenuitem2">
-                    <property name="visible">True</property>
-                    <property name="can_focus">False</property>
-                    <property name="use_action_appearance">False</property>
-                  </object>
-                </child>
-                <child>
-                  <object class="GtkImageMenuItem" id="imagemenuitem5">
-                    <property name="label">gtk-quit</property>
-                    <property name="visible">True</property>
-                    <property name="can_focus">False</property>
-                    <property name="use_action_appearance">False</property>
-                    <property name="use_underline">True</property>
-                    <property name="use_stock">True</property>
-                  </object>
-                </child>
-              </object>
-            </child>
-          </object>
-        </child>
-        <child>
-          <object class="GtkMenuItem" id="menuitem2">
-            <property name="visible">True</property>
-            <property name="can_focus">False</property>
-            <property name="use_action_appearance">False</property>
-            <property name="label" translatable="yes">_Edit</property>
-            <property name="use_underline">True</property>
-            <child type="submenu">
-              <object class="GtkMenu" id="menu2">
-                <property name="visible">True</property>
-                <property name="can_focus">False</property>
-                <child>
-                  <object class="GtkImageMenuItem" id="imagemenuitem6">
-                    <property name="label">gtk-cut</property>
-                    <property name="visible">True</property>
-                    <property name="can_focus">False</property>
-                    <property name="use_action_appearance">False</property>
-                    <property name="use_underline">True</property>
-                    <property name="use_stock">True</property>
-                  </object>
-                </child>
-                <child>
-                  <object class="GtkImageMenuItem" id="imagemenuitem7">
-                    <property name="label">gtk-copy</property>
-                    <property name="visible">True</property>
-                    <property name="can_focus">False</property>
-                    <property name="use_action_appearance">False</property>
-                    <property name="use_underline">True</property>
-                    <property name="use_stock">True</property>
-                  </object>
-                </child>
-                <child>
-                  <object class="GtkImageMenuItem" id="imagemenuitem8">
-                    <property name="label">gtk-paste</property>
-                    <property name="visible">True</property>
-                    <property name="can_focus">False</property>
-                    <property name="use_action_appearance">False</property>
-                    <property name="use_underline">True</property>
-                    <property name="use_stock">True</property>
-                  </object>
-                </child>
-                <child>
-                  <object class="GtkImageMenuItem" id="imagemenuitem9">
-                    <property name="label">gtk-delete</property>
-                    <property name="visible">True</property>
-                    <property name="can_focus">False</property>
-                    <property name="use_action_appearance">False</property>
-                    <property name="use_underline">True</property>
-                    <property name="use_stock">True</property>
-                  </object>
-                </child>
-              </object>
-            </child>
-          </object>
-        </child>
-        <child>
-          <object class="GtkMenuItem" id="menuitem3">
-            <property name="visible">True</property>
-            <property name="can_focus">False</property>
-            <property name="use_action_appearance">False</property>
-            <property name="label" translatable="yes">_View</property>
-            <property name="use_underline">True</property>
-          </object>
-        </child>
-        <child>
-          <object class="GtkMenuItem" id="menuitem4">
-            <property name="visible">True</property>
-            <property name="can_focus">False</property>
-            <property name="use_action_appearance">False</property>
-            <property name="label" translatable="yes">_Help</property>
-            <property name="use_underline">True</property>
-            <child type="submenu">
-              <object class="GtkMenu" id="menu3">
-                <property name="visible">True</property>
-                <property name="can_focus">False</property>
-                <child>
-                  <object class="GtkImageMenuItem" id="imagemenuitem10">
-                    <property name="label">gtk-about</property>
-                    <property name="visible">True</property>
-                    <property name="can_focus">False</property>
-                    <property name="use_action_appearance">False</property>
-                    <property name="use_underline">True</property>
-                    <property name="use_stock">True</property>
-                  </object>
-                </child>
-              </object>
-            </child>
-          </object>
-        </child>
-      </object>
-    </child>
-  </object>
-</interface>
diff --git a/tests/a11y/menus.txt b/tests/a11y/menus.txt
deleted file mode 100644 (file)
index 7681245..0000000
+++ /dev/null
@@ -1,134 +0,0 @@
-window1
-  "frame"
-  index: 0
-  state: enabled resizable sensitive showing visible
-  toolkit: gtk
-  <AtkComponent>
-  layer: window
-  alpha: 1
-  menubar1
-    "menu bar"
-    parent: window1
-    index: 0
-    state: enabled sensitive showing visible
-    toolkit: gtk
-    <AtkComponent>
-    layer: widget
-    alpha: 1
-    <AtkSelection>
-    menuitem1
-      "menu"
-      parent: menubar1
-      index: 0
-      name: File
-      state: enabled selectable sensitive showing visible
-      toolkit: gtk
-      <AtkComponent>
-      layer: popup
-      alpha: 1
-      <AtkAction>
-      action 0 name: click
-      action 0 description: Clicks the menuitem
-      action 0 keybinding: <Alt>f;<Alt>f;
-      <AtkSelection>
-      imagemenuitem1
-        "menu item"
-        parent: menuitem1
-        index: 0
-        name: New
-        state: enabled selectable sensitive visible
-        toolkit: gtk
-        <AtkComponent>
-        layer: popup
-        alpha: 1
-        <AtkAction>
-        action 0 name: click
-        action 0 description: Clicks the menuitem
-        action 0 keybinding: n;<Alt>f:n;
-        <AtkSelection>
-      imagemenuitem2
-        "menu item"
-        parent: menuitem1
-        index: 1
-        name: bla
-        state: enabled selectable sensitive visible
-        toolkit: gtk
-        <AtkComponent>
-        layer: popup
-        alpha: 1
-        <AtkAction>
-        action 0 name: click
-        action 0 description: Clicks the menuitem
-        <AtkSelection>
-      separatormenuitem1
-        "separator"
-        parent: menuitem1
-        index: 2
-        state: enabled selectable sensitive visible
-        toolkit: gtk
-        <AtkComponent>
-        layer: popup
-        alpha: 1
-        <AtkAction>
-        <AtkSelection>
-      menuitem3
-        "check menu item"
-        parent: menuitem1
-        index: 3
-        name: check item
-        state: enabled selectable sensitive visible
-        toolkit: gtk
-        <AtkComponent>
-        layer: popup
-        alpha: 1
-        <AtkAction>
-        action 0 name: click
-        action 0 description: Clicks the menuitem
-        <AtkSelection>
-    menuitem2
-      "menu"
-      parent: menubar1
-      index: 1
-      name: Edit
-      state: enabled selectable sensitive showing visible
-      toolkit: gtk
-      <AtkComponent>
-      layer: popup
-      alpha: 1
-      <AtkAction>
-      action 0 name: click
-      action 0 description: Clicks the menuitem
-      action 0 keybinding: <Alt>e;<Alt>e;
-      <AtkSelection>
-      menuitem4
-        "radio menu item"
-        parent: menuitem2
-        index: 0
-        name: radio1
-        member-of: menuitem5
-                   menuitem4
-        state: enabled selectable sensitive visible
-        toolkit: gtk
-        <AtkComponent>
-        layer: popup
-        alpha: 1
-        <AtkAction>
-        action 0 name: click
-        action 0 description: Clicks the menuitem
-        <AtkSelection>
-      menuitem5
-        "radio menu item"
-        parent: menuitem2
-        index: 1
-        name: radio2
-        member-of: menuitem5
-                   menuitem4
-        state: enabled selectable sensitive visible
-        toolkit: gtk
-        <AtkComponent>
-        layer: popup
-        alpha: 1
-        <AtkAction>
-        action 0 name: click
-        action 0 description: Clicks the menuitem
-        <AtkSelection>
diff --git a/tests/a11y/menus.ui b/tests/a11y/menus.ui
deleted file mode 100644 (file)
index 5b926f3..0000000
+++ /dev/null
@@ -1,106 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<interface>
-  <!-- interface-requires gtk+ 3.0 -->
-  <object class="GtkImage" id="image1">
-    <property name="visible">True</property>
-    <property name="can_focus">False</property>
-    <property name="stock">gtk-go-up</property>
-    <property name="icon-size">5</property>
-  </object>
-  <object class="GtkWindow" id="window1">
-    <property name="can_focus">False</property>
-    <child>
-      <object class="GtkMenuBar" id="menubar1">
-        <property name="visible">True</property>
-        <property name="can_focus">False</property>
-        <child>
-          <object class="GtkMenuItem" id="menuitem1">
-            <property name="visible">True</property>
-            <property name="can_focus">False</property>
-            <property name="use_action_appearance">False</property>
-            <property name="label" translatable="yes">_File</property>
-            <property name="use_underline">True</property>
-            <child type="submenu">
-              <object class="GtkMenu" id="menu1">
-                <property name="visible">True</property>
-                <property name="can_focus">False</property>
-                <child>
-                  <object class="GtkImageMenuItem" id="imagemenuitem1">
-                    <property name="label">gtk-new</property>
-                    <property name="visible">True</property>
-                    <property name="can_focus">False</property>
-                    <property name="use_action_appearance">False</property>
-                    <property name="use_underline">True</property>
-                    <property name="use_stock">True</property>
-                  </object>
-                </child>
-                <child>
-                  <object class="GtkImageMenuItem" id="imagemenuitem2">
-                    <property name="label" translatable="yes">bla</property>
-                    <property name="visible">True</property>
-                    <property name="can_focus">False</property>
-                    <property name="use_action_appearance">False</property>
-                    <property name="image">image1</property>
-                    <property name="use_stock">False</property>
-                  </object>
-                </child>
-                <child>
-                  <object class="GtkSeparatorMenuItem" id="separatormenuitem1">
-                    <property name="visible">True</property>
-                    <property name="can_focus">False</property>
-                    <property name="use_action_appearance">False</property>
-                  </object>
-                </child>
-                <child>
-                  <object class="GtkCheckMenuItem" id="menuitem3">
-                    <property name="visible">True</property>
-                    <property name="can_focus">False</property>
-                    <property name="use_action_appearance">False</property>
-                    <property name="label" translatable="yes">check item</property>
-                    <property name="use_underline">True</property>
-                  </object>
-                </child>
-              </object>
-            </child>
-          </object>
-        </child>
-        <child>
-          <object class="GtkMenuItem" id="menuitem2">
-            <property name="visible">True</property>
-            <property name="can_focus">False</property>
-            <property name="use_action_appearance">False</property>
-            <property name="label" translatable="yes">_Edit</property>
-            <property name="use_underline">True</property>
-            <child type="submenu">
-              <object class="GtkMenu" id="menu2">
-                <property name="visible">True</property>
-                <property name="can_focus">False</property>
-                <child>
-                  <object class="GtkRadioMenuItem" id="menuitem4">
-                    <property name="visible">True</property>
-                    <property name="can_focus">False</property>
-                    <property name="use_action_appearance">False</property>
-                    <property name="label" translatable="yes">radio1</property>
-                    <property name="use_underline">True</property>
-                    <property name="draw_as_radio">True</property>
-                  </object>
-                </child>
-                <child>
-                  <object class="GtkRadioMenuItem" id="menuitem5">
-                    <property name="visible">True</property>
-                    <property name="can_focus">False</property>
-                    <property name="use_action_appearance">False</property>
-                    <property name="label" translatable="yes">radio2</property>
-                    <property name="use_underline">True</property>
-                    <property name="draw_as_radio">True</property>
-                    <property name="group">menuitem4</property>
-                  </object>
-                </child>
-              </object>
-            </child>
-          </object>
-        </child>
-      </object>
-    </child>
-  </object>
-</interface>
diff --git a/tests/a11y/messagedialog.txt b/tests/a11y/messagedialog.txt
deleted file mode 100644 (file)
index 1d4275e..0000000
+++ /dev/null
@@ -1,135 +0,0 @@
-window1
-  "alert"
-  index: 0
-  name: Information
-  state: enabled sensitive showing visible
-  toolkit: gtk
-  <AtkComponent>
-  layer: window
-  alpha: 1
-  dialog-vbox1
-    "filler"
-    parent: window1
-    index: 0
-    state: enabled sensitive showing vertical visible
-    toolkit: gtk
-    <AtkComponent>
-    layer: widget
-    alpha: 1
-    box
-      "filler"
-      parent: dialog-vbox1
-      index: 0
-      state: enabled horizontal sensitive showing visible
-      toolkit: gtk
-      <AtkComponent>
-      layer: widget
-      alpha: 1
-      image
-        "icon"
-        parent: box
-        index: 0
-        state: enabled sensitive showing visible
-        toolkit: gtk
-        <AtkComponent>
-        layer: widget
-        alpha: 1
-        <AtkImage>
-        image size: 48 x 48
-        image description: (null)
-      message_area
-        "filler"
-        parent: box
-        index: 1
-        state: enabled sensitive showing vertical visible
-        toolkit: gtk
-        <AtkComponent>
-        layer: widget
-        alpha: 1
-        label
-          "label"
-          parent: message_area
-          index: 0
-          name: Information
-          state: enabled focusable multi-line sensitive showing visible
-          toolkit: gtk
-          <AtkComponent>
-          layer: widget
-          alpha: 1
-          <AtkText>
-          text: Information
-          character count: 11
-          caret offset: 0
-          default attributes: bg-color: <omitted>
-                              bg-full-height: 0
-                              direction: <omitted>
-                              editable: false
-                              family-name: <omitted>
-                              fg-color: <omitted>
-                              indent: 0
-                              invisible: false
-                              justification: left
-                              language: <omitted>
-                              left-margin: 0
-                              pixels-above-lines: 0
-                              pixels-below-lines: 0
-                              pixels-inside-wrap: 0
-                              right-margin: 0
-                              rise: 0
-                              scale: 1
-                              size: <omitted>
-                              stretch: <omitted>
-                              strikethrough: false
-                              style: <omitted>
-                              underline: none
-                              variant: <omitted>
-                              weight: <omitted>
-                              wrap-mode: word
-        secondary_label
-          "label"
-          parent: message_area
-          index: 1
-          name: More Information
-          state: enabled focusable multi-line sensitive showing visible
-          toolkit: gtk
-          <AtkComponent>
-          layer: widget
-          alpha: 1
-          <AtkText>
-          text: More Information
-          character count: 16
-          caret offset: 0
-          default attributes: bg-color: <omitted>
-                              bg-full-height: 0
-                              direction: <omitted>
-                              editable: false
-                              family-name: <omitted>
-                              fg-color: <omitted>
-                              indent: 0
-                              invisible: false
-                              justification: left
-                              language: <omitted>
-                              left-margin: 0
-                              pixels-above-lines: 0
-                              pixels-below-lines: 0
-                              pixels-inside-wrap: 0
-                              right-margin: 0
-                              rise: 0
-                              scale: 1
-                              size: <omitted>
-                              stretch: <omitted>
-                              strikethrough: false
-                              style: <omitted>
-                              underline: none
-                              variant: <omitted>
-                              weight: <omitted>
-                              wrap-mode: word
-    dialog-action_area1
-      "filler"
-      parent: dialog-vbox1
-      index: 1
-      state: enabled horizontal sensitive showing visible
-      toolkit: gtk
-      <AtkComponent>
-      layer: widget
-      alpha: 1
diff --git a/tests/a11y/messagedialog.ui b/tests/a11y/messagedialog.ui
deleted file mode 100644 (file)
index a6a080e..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<interface>
-  <!-- interface-requires gtk+ 3.0 -->
-  <object class="GtkMessageDialog" id="window1">
-    <property name="visible">True</property>
-    <property name="message-type">info</property>
-    <property name="text" translatable="yes">Information</property>
-    <property name="secondary-text" translatable="yes">More Information</property>
-  </object>
-</interface>
diff --git a/tests/a11y/mnemonic.txt b/tests/a11y/mnemonic.txt
deleted file mode 100644 (file)
index 7ca52b9..0000000
+++ /dev/null
@@ -1,100 +0,0 @@
-window1
-  "window"
-  index: 0
-  state: enabled resizable sensitive showing visible
-  toolkit: gtk
-  <AtkComponent>
-  layer: window
-  alpha: 1
-  box1
-    "filler"
-    parent: window1
-    index: 0
-    state: enabled horizontal sensitive
-    toolkit: gtk
-    <AtkComponent>
-    layer: widget
-    alpha: 1
-    label1
-      "label"
-      parent: box1
-      index: 0
-      name: Entry:
-      label-for: entry1
-      state: enabled multi-line sensitive visible
-      toolkit: gtk
-      <AtkComponent>
-      layer: widget
-      alpha: 1
-      <AtkText>
-      text: Entry:
-      character count: 6
-      caret offset: 0
-      default attributes: bg-color: <omitted>
-                          bg-full-height: 0
-                          direction: <omitted>
-                          editable: false
-                          family-name: <omitted>
-                          fg-color: <omitted>
-                          indent: 0
-                          invisible: false
-                          justification: left
-                          language: <omitted>
-                          left-margin: 0
-                          pixels-above-lines: 0
-                          pixels-below-lines: 0
-                          pixels-inside-wrap: 0
-                          right-margin: 0
-                          rise: 0
-                          scale: 1
-                          size: <omitted>
-                          stretch: <omitted>
-                          strikethrough: false
-                          style: <omitted>
-                          underline: none
-                          variant: <omitted>
-                          weight: <omitted>
-                          wrap-mode: word
-    entry1
-      "text"
-      parent: box1
-      index: 1
-      labelled-by: label1
-      state: editable enabled focusable sensitive single-line visible
-      toolkit: gtk
-      <AtkComponent>
-      layer: widget
-      alpha: 1
-      <AtkText>
-      text: text
-      character count: 4
-      caret offset: 0
-      default attributes: bg-color: <omitted>
-                          bg-full-height: 0
-                          direction: <omitted>
-                          editable: false
-                          family-name: <omitted>
-                          fg-color: <omitted>
-                          indent: 0
-                          invisible: false
-                          justification: left
-                          language: <omitted>
-                          left-margin: 0
-                          pixels-above-lines: 0
-                          pixels-below-lines: 0
-                          pixels-inside-wrap: 0
-                          right-margin: 0
-                          rise: 0
-                          scale: 1
-                          size: <omitted>
-                          stretch: <omitted>
-                          strikethrough: false
-                          style: <omitted>
-                          underline: none
-                          variant: <omitted>
-                          weight: <omitted>
-                          wrap-mode: word
-      <AtkAction>
-      action 0 name: activate
-      action 0 description: Activates the entry
-      action 0 keybinding: <Alt>e
diff --git a/tests/a11y/mnemonic.ui b/tests/a11y/mnemonic.ui
deleted file mode 100644 (file)
index 443f2cd..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<interface>
-  <!-- interface-requires gtk+ 3.0 -->
-  <object class="GtkWindow" id="window1">
-    <property name="can_focus">False</property>
-    <property name="type">popup</property>
-    <child>
-      <object class="GtkBox" id="box1">
-        <child>
-          <object class="GtkLabel" id="label1">
-            <property name="label" translatable="yes">_Entry:</property>
-            <property name="visible">True</property>
-            <property name="use_underline">True</property>
-            <property name="mnemonic_widget">entry1</property>
-          </object>
-        </child>
-        <child>
-          <object class="GtkEntry" id="entry1">
-            <property name="text" translatable="yes">text</property>
-            <property name="visible">True</property>
-          </object>
-        </child>
-      </object>
-    </child>
-  </object>
-</interface>
diff --git a/tests/a11y/notebook.txt b/tests/a11y/notebook.txt
deleted file mode 100644 (file)
index cc9e5ff..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-window1
-  "window"
-  index: 0
-  state: enabled resizable sensitive showing visible
-  toolkit: gtk
-  <AtkComponent>
-  layer: window
-  alpha: 1
-  notebook1
-    "page tab list"
-    parent: window1
-    index: 0
-    state: enabled focusable sensitive showing visible
-    toolkit: gtk
-    <AtkComponent>
-    layer: widget
-    alpha: 1
-    <AtkSelection>
-    selected children: unnamed-GtkNotebookPageAccessible-0
-    unnamed-GtkNotebookPageAccessible-0
-      "page tab"
-      parent: notebook1
-      index: 0
-      name: Tab 1
-      state: enabled multi-line selectable selected sensitive showing visible
-      <AtkComponent>
-      layer: widget
-      alpha: 1
-      page1
-        "push button"
-        index: 0
-        name: Yes
-        state: enabled focusable sensitive showing visible
-        toolkit: gtk
-        <AtkComponent>
-        layer: widget
-        alpha: 1
-        <AtkImage>
-        image size: 20 x 20
-        image description: (null)
-        <AtkAction>
-        action 0 name: click
-        action 0 description: Clicks the button
-        action 0 keybinding: <Alt>y
-    unnamed-GtkNotebookPageAccessible-1
-      "page tab"
-      parent: notebook1
-      index: 1
-      name: Tab 2
-      state: enabled multi-line selectable sensitive showing visible
-      <AtkComponent>
-      layer: widget
-      alpha: 1
-      page2
-        "push button"
-        index: 0
-        name: No
-        state: enabled focusable sensitive visible
-        toolkit: gtk
-        <AtkComponent>
-        layer: widget
-        alpha: 1
-        <AtkImage>
-        image size: 20 x 20
-        image description: (null)
-        <AtkAction>
-        action 0 name: click
-        action 0 description: Clicks the button
-        action 0 keybinding: <Alt>n
diff --git a/tests/a11y/notebook.ui b/tests/a11y/notebook.ui
deleted file mode 100644 (file)
index 95d1328..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<interface>
-  <!-- interface-requires gtk+ 3.0 -->
-  <object class="GtkWindow" id="window1">
-    <property name="can_focus">False</property>
-    <property name="type">popup</property>
-    <child>
-      <object class="GtkNotebook" id="notebook1">
-        <property name="visible">True</property>
-        <child>
-          <object class="GtkButton" id="page1">
-            <property name="label">gtk-yes</property>
-            <property name="use_stock">True</property>
-            <property name="visible">True</property>
-          </object>
-        </child>
-        <child type="tab">
-          <object class="GtkLabel" id="tab1">
-            <property name="label" translatable="yes">Tab 1</property>
-            <property name="visible">True</property>
-          </object>
-        </child>
-        <child>
-          <object class="GtkButton" id="page2">
-            <property name="label">gtk-no</property>
-            <property name="use_stock">True</property>
-            <property name="visible">True</property>
-          </object>
-        </child>
-        <child type="tab">
-          <object class="GtkLabel" id="tab2">
-            <property name="label" translatable="yes">Tab 2</property>
-            <property name="visible">True</property>
-          </object>
-        </child>
-      </object>
-    </child>
-  </object>
-</interface>
diff --git a/tests/a11y/paned.txt b/tests/a11y/paned.txt
deleted file mode 100644 (file)
index c1eecc7..0000000
+++ /dev/null
@@ -1,100 +0,0 @@
-window1
-  "window"
-  index: 0
-  state: enabled resizable sensitive showing visible
-  toolkit: gtk
-  <AtkComponent>
-  layer: window
-  alpha: 1
-  paned1
-    "split pane"
-    parent: window1
-    index: 0
-    state: enabled focusable horizontal sensitive
-    toolkit: gtk
-    <AtkComponent>
-    layer: widget
-    alpha: 1
-    <AtkValue>
-    minimum value: 0
-    maximum value: 0
-    current value: 0
-    minimum increment: 0
-    label1
-      "label"
-      parent: paned1
-      index: 0
-      name: Left
-      state: enabled multi-line sensitive visible
-      toolkit: gtk
-      <AtkComponent>
-      layer: widget
-      alpha: 1
-      <AtkText>
-      text: Left
-      character count: 4
-      caret offset: 0
-      default attributes: bg-color: <omitted>
-                          bg-full-height: 0
-                          direction: <omitted>
-                          editable: false
-                          family-name: <omitted>
-                          fg-color: <omitted>
-                          indent: 0
-                          invisible: false
-                          justification: left
-                          language: <omitted>
-                          left-margin: 0
-                          pixels-above-lines: 0
-                          pixels-below-lines: 0
-                          pixels-inside-wrap: 0
-                          right-margin: 0
-                          rise: 0
-                          scale: 1
-                          size: <omitted>
-                          stretch: <omitted>
-                          strikethrough: false
-                          style: <omitted>
-                          underline: none
-                          variant: <omitted>
-                          weight: <omitted>
-                          wrap-mode: word
-    label2
-      "label"
-      parent: paned1
-      index: 1
-      name: Right
-      state: enabled multi-line sensitive visible
-      toolkit: gtk
-      <AtkComponent>
-      layer: widget
-      alpha: 1
-      <AtkText>
-      text: Right
-      character count: 5
-      caret offset: 0
-      default attributes: bg-color: <omitted>
-                          bg-full-height: 0
-                          direction: <omitted>
-                          editable: false
-                          family-name: <omitted>
-                          fg-color: <omitted>
-                          indent: 0
-                          invisible: false
-                          justification: left
-                          language: <omitted>
-                          left-margin: 0
-                          pixels-above-lines: 0
-                          pixels-below-lines: 0
-                          pixels-inside-wrap: 0
-                          right-margin: 0
-                          rise: 0
-                          scale: 1
-                          size: <omitted>
-                          stretch: <omitted>
-                          strikethrough: false
-                          style: <omitted>
-                          underline: none
-                          variant: <omitted>
-                          weight: <omitted>
-                          wrap-mode: word
diff --git a/tests/a11y/paned.ui b/tests/a11y/paned.ui
deleted file mode 100644 (file)
index 2126257..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<interface>
-  <!-- interface-requires gtk+ 3.0 -->
-  <object class="GtkWindow" id="window1">
-    <property name="can_focus">False</property>
-    <property name="type">popup</property>
-    <child>
-      <object class="GtkPaned" id="paned1">
-        <child>
-          <object class="GtkLabel" id="label1">
-            <property name="label" translatable="yes">Left</property>
-            <property name="visible">True</property>
-          </object>
-        </child>
-        <child>
-          <object class="GtkLabel" id="label2">
-            <property name="label" translatable="yes">Right</property>
-            <property name="visible">True</property>
-          </object>
-        </child>
-      </object>
-    </child>
-  </object>
-</interface>
diff --git a/tests/a11y/pickers.txt b/tests/a11y/pickers.txt
deleted file mode 100644 (file)
index 237b1fc..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-window1
-  "window"
-  index: 0
-  state: enabled resizable sensitive showing visible
-  toolkit: gtk
-  <AtkComponent>
-  layer: window
-  alpha: 1
-  grid1
-    "panel"
-    parent: window1
-    index: 0
-    state: enabled horizontal sensitive showing visible
-    toolkit: gtk
-    <AtkComponent>
-    layer: widget
-    alpha: 1
-    button3
-      "push button"
-      parent: grid1
-      index: 0
-      name: Sans
-      state: enabled focusable sensitive showing visible
-      toolkit: gtk
-      <AtkComponent>
-      layer: widget
-      alpha: 1
-      <AtkImage>
-      image size: -1 x -1
-      image description: (null)
-      <AtkAction>
-      action 0 name: click
-      action 0 description: Clicks the button
-    button2
-      "push button"
-      parent: grid1
-      index: 1
-      state: enabled focusable sensitive showing visible
-      toolkit: gtk
-      <AtkComponent>
-      layer: widget
-      alpha: 1
-      <AtkImage>
-      image size: -1 x -1
-      image description: (null)
-      <AtkAction>
-      action 0 name: click
-      action 0 description: Clicks the button
-    button1
-      "combo box"
-      parent: grid1
-      index: 2
-      state: enabled sensitive showing visible
-      toolkit: gtk
-      <AtkComponent>
-      layer: widget
-      alpha: 1
-      <AtkAction>
-      action 0 name: press
-      action 0 description: Presses the combobox
-      unnamed-GtkMenuAccessible-0
-        "menu"
-        parent: button1
-        index: 0
-        state: enabled sensitive
-        toolkit: gtk
-        <AtkComponent>
-        layer: popup
-        alpha: 1
-        <AtkSelection>
diff --git a/tests/a11y/pickers.ui b/tests/a11y/pickers.ui
deleted file mode 100644 (file)
index a540fa1..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<interface>
-  <!-- interface-requires gtk+ 3.0 -->
-  <object class="GtkWindow" id="window1">
-    <property name="can_focus">False</property>
-    <property name="type">popup</property>
-    <child>
-      <object class="GtkGrid" id="grid1">
-        <property name="visible">True</property>
-        <child>
-          <object class="GtkAppChooserButton" id="button1">
-            <property name="visible">True</property>
-          </object>
-          <packing>
-            <property name="left_attach">0</property>
-            <property name="top_attach">0</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkColorButton" id="button2">
-            <property name="visible">True</property>
-          </object>
-          <packing>
-            <property name="left_attach">1</property>
-            <property name="top_attach">0</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkFontButton" id="button3">
-            <property name="visible">True</property>
-          </object>
-          <packing>
-            <property name="left_attach">2</property>
-            <property name="top_attach">0</property>
-          </packing>
-        </child>
-<!--
-        <child>
-          <object class="GtkFileChooserButton" id="button4">
-            <property name="visible">True</property>
-          </object>
-          <packing>
-            <property name="left_attach">3</property>
-            <property name="top_attach">0</property>
-          </packing>
-        </child>
--->
-      </object>
-    </child>
-  </object>
-</interface>
diff --git a/tests/a11y/placeholder-text.txt b/tests/a11y/placeholder-text.txt
deleted file mode 100644 (file)
index 4ac8e1e..0000000
+++ /dev/null
@@ -1,143 +0,0 @@
-window1
-  "window"
-  index: 0
-  state: enabled resizable sensitive showing visible
-  toolkit: gtk
-  <AtkComponent>
-  layer: window
-  alpha: 1
-  box1
-    "filler"
-    parent: window1
-    index: 0
-    state: enabled sensitive showing vertical visible
-    toolkit: gtk
-    <AtkComponent>
-    layer: widget
-    alpha: 1
-    entry1
-      "text"
-      parent: box1
-      index: 0
-      state: editable enabled focusable sensitive showing single-line visible
-      toolkit: gtk
-      placeholder-text: Subject or Addresses contain
-      <AtkComponent>
-      layer: widget
-      alpha: 1
-      <AtkText>
-      text: 
-      character count: 0
-      caret offset: 0
-      default attributes: bg-color: <omitted>
-                          bg-full-height: 0
-                          direction: <omitted>
-                          editable: false
-                          family-name: <omitted>
-                          fg-color: <omitted>
-                          indent: 0
-                          invisible: false
-                          justification: left
-                          language: <omitted>
-                          left-margin: 0
-                          pixels-above-lines: 0
-                          pixels-below-lines: 0
-                          pixels-inside-wrap: 0
-                          right-margin: 0
-                          rise: 0
-                          scale: 1
-                          size: <omitted>
-                          stretch: <omitted>
-                          strikethrough: false
-                          style: <omitted>
-                          underline: none
-                          variant: <omitted>
-                          weight: <omitted>
-                          wrap-mode: word
-      <AtkAction>
-      action 0 name: activate
-      action 0 description: Activates the entry
-    entry2
-      "text"
-      parent: box1
-      index: 1
-      state: editable enabled focusable sensitive showing single-line visible
-      toolkit: gtk
-      placeholder-text: Message contains
-      <AtkComponent>
-      layer: widget
-      alpha: 1
-      <AtkText>
-      text: Some text
-      character count: 9
-      caret offset: 0
-      default attributes: bg-color: <omitted>
-                          bg-full-height: 0
-                          direction: <omitted>
-                          editable: false
-                          family-name: <omitted>
-                          fg-color: <omitted>
-                          indent: 0
-                          invisible: false
-                          justification: left
-                          language: <omitted>
-                          left-margin: 0
-                          pixels-above-lines: 0
-                          pixels-below-lines: 0
-                          pixels-inside-wrap: 0
-                          right-margin: 0
-                          rise: 0
-                          scale: 1
-                          size: <omitted>
-                          stretch: <omitted>
-                          strikethrough: false
-                          style: <omitted>
-                          underline: none
-                          variant: <omitted>
-                          weight: <omitted>
-                          wrap-mode: word
-      <AtkAction>
-      action 0 name: activate
-      action 0 description: Activates the entry
-    entry3
-      "text"
-      parent: box1
-      index: 2
-      state: editable enabled focusable sensitive showing single-line visible
-      toolkit: gtk
-      placeholder-text: Body contains
-      <AtkComponent>
-      layer: widget
-      alpha: 1
-      <AtkText>
-      text: 
-      character count: 0
-      caret offset: 0
-      default attributes: bg-color: <omitted>
-                          bg-full-height: 0
-                          direction: <omitted>
-                          editable: false
-                          family-name: <omitted>
-                          fg-color: <omitted>
-                          indent: 0
-                          invisible: false
-                          justification: left
-                          language: <omitted>
-                          left-margin: 0
-                          pixels-above-lines: 0
-                          pixels-below-lines: 0
-                          pixels-inside-wrap: 0
-                          right-margin: 0
-                          rise: 0
-                          scale: 1
-                          size: <omitted>
-                          stretch: <omitted>
-                          strikethrough: false
-                          style: <omitted>
-                          underline: none
-                          variant: <omitted>
-                          weight: <omitted>
-                          wrap-mode: word
-      <AtkAction>
-      action 0 name: activate
-      action 0 description: Activates the entry
diff --git a/tests/a11y/placeholder-text.ui b/tests/a11y/placeholder-text.ui
deleted file mode 100644 (file)
index 4657cb5..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<interface>
-  <!-- interface-requires gtk+ 3.0 -->
-  <object class="GtkWindow" id="window1">
-    <property name="can_focus">False</property>
-    <property name="type">popup</property>
-    <child>
-      <object class="GtkBox" id="box1">
-        <property name="visible">True</property>
-        <property name="can_focus">False</property>
-        <property name="orientation">vertical</property>
-        <child>
-          <object class="GtkEntry" id="entry1">
-            <property name="visible">True</property>
-            <property name="can_focus">True</property>
-            <property name="invisible_char">●</property>
-            <property name="invisible_char_set">True</property>
-            <property name="placeholder_text">Subject or Addresses contain</property>
-          </object>
-          <packing>
-            <property name="expand">False</property>
-            <property name="fill">True</property>
-            <property name="position">0</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkEntry" id="entry2">
-            <property name="visible">True</property>
-            <property name="can_focus">True</property>
-            <property name="invisible_char">●</property>
-            <property name="text" translatable="yes">Some text</property>
-            <property name="invisible_char_set">True</property>
-            <property name="placeholder_text">Message contains</property>
-          </object>
-          <packing>
-            <property name="expand">False</property>
-            <property name="fill">True</property>
-            <property name="position">1</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkEntry" id="entry3">
-            <property name="visible">True</property>
-            <property name="can_focus">True</property>
-            <property name="has_focus">True</property>
-            <property name="is_focus">True</property>
-            <property name="invisible_char">●</property>
-            <property name="invisible_char_set">True</property>
-            <property name="placeholder_text">Body contains</property>
-          </object>
-          <packing>
-            <property name="expand">False</property>
-            <property name="fill">True</property>
-            <property name="position">2</property>
-          </packing>
-        </child>
-      </object>
-    </child>
-  </object>
-</interface>
diff --git a/tests/a11y/progress.txt b/tests/a11y/progress.txt
deleted file mode 100644 (file)
index 186711a..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-window1
-  "window"
-  index: 0
-  state: enabled resizable sensitive showing visible
-  toolkit: gtk
-  <AtkComponent>
-  layer: window
-  alpha: 1
-  progress1
-    "progress bar"
-    parent: window1
-    index: 0
-    state: enabled horizontal sensitive showing visible
-    toolkit: gtk
-    <AtkComponent>
-    layer: widget
-    alpha: 1
-    <AtkValue>
-    minimum value: 0.000000
-    maximum value: 1.000000
-    current value: 0.500000
-    minimum increment: 0.000000
diff --git a/tests/a11y/progress.ui b/tests/a11y/progress.ui
deleted file mode 100644 (file)
index f34c13b..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<interface>
-  <!-- interface-requires gtk+ 3.0 -->
-  <object class="GtkWindow" id="window1">
-    <property name="can_focus">False</property>
-    <property name="type">popup</property>
-    <child>
-      <object class="GtkProgressBar" id="progress1">
-        <property name="visible">True</property>
-        <property name="fraction">0.5</property>
-        <property name="text">Good progress!</property>
-        <property name="show-text">True</property>
-      </object>
-    </child>
-  </object>
-</interface>
diff --git a/tests/a11y/range.txt b/tests/a11y/range.txt
deleted file mode 100644 (file)
index 4a26c5f..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-window1
-  "window"
-  index: 0
-  state: enabled resizable sensitive showing visible
-  toolkit: gtk
-  <AtkComponent>
-  layer: window
-  alpha: 1
-  grid1
-    "panel"
-    parent: window1
-    index: 0
-    state: enabled horizontal sensitive showing visible
-    toolkit: gtk
-    <AtkComponent>
-    layer: widget
-    alpha: 1
-    scrollbar1
-      "scroll bar"
-      parent: grid1
-      index: 0
-      state: enabled focusable horizontal sensitive showing visible
-      toolkit: gtk
-      <AtkComponent>
-      layer: widget
-      alpha: 1
-      <AtkValue>
-      minimum value: 0.500000
-      maximum value: 99.500000
-      current value: 45.500000
-      minimum increment: 0.500000
-    scale1
-      "slider"
-      parent: grid1
-      index: 1
-      description: 45.5
-      state: enabled focusable horizontal sensitive showing visible
-      toolkit: gtk
-      <AtkComponent>
-      layer: widget
-      alpha: 1
-      <AtkValue>
-      minimum value: 0.500000
-      maximum value: 99.500000
-      current value: 45.500000
-      minimum increment: 0.500000
diff --git a/tests/a11y/range.ui b/tests/a11y/range.ui
deleted file mode 100644 (file)
index 9c1ac45..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<interface>
-  <!-- interface-requires gtk+ 3.0 -->
-  <object class="GtkAdjustment" id="adjustment1">
-    <property name="lower">0.5</property>
-    <property name="upper">99.5</property>
-    <property name="page-size">0</property>
-    <property name="value">45.5</property>
-    <property name="step-increment">0.5</property>
-    <property name="page-increment">5.0</property>
-  </object>
-  <object class="GtkWindow" id="window1">
-    <property name="can_focus">False</property>
-    <property name="type">popup</property>
-    <child>
-      <object class="GtkGrid" id="grid1">
-        <property name="visible">True</property>
-        <child>
-          <object class="GtkScale" id="scale1">
-            <property name="visible">True</property>
-            <property name="can_focus">True</property>
-            <property name="adjustment">adjustment1</property>
-          </object>
-          <packing>
-            <property name="left_attach">0</property>
-            <property name="top_attach">0</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkScrollbar" id="scrollbar1">
-            <property name="visible">True</property>
-            <property name="can_focus">True</property>
-            <property name="adjustment">adjustment1</property>
-          </object>
-          <packing>
-            <property name="left_attach">1</property>
-            <property name="top_attach">0</property>
-          </packing>
-        </child>
-      </object>
-    </child>
-  </object>
-</interface>
diff --git a/tests/a11y/scale-drawvalue.txt b/tests/a11y/scale-drawvalue.txt
deleted file mode 100644 (file)
index e64b935..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-window1
-  "frame"
-  index: 0
-  state: enabled resizable sensitive showing visible
-  toolkit: gtk
-  <AtkComponent>
-  layer: window
-  alpha: 1
-  scale1
-    "slider"
-    parent: window1
-    index: 0
-    description: -42.0
-    state: enabled focusable horizontal sensitive showing visible
-    toolkit: gtk
-    <AtkComponent>
-    layer: widget
-    alpha: 1
-    <AtkValue>
-    minimum value: -100.000000
-    maximum value: 100.000000
-    current value: -42.000000
-    minimum increment: 1.000000
diff --git a/tests/a11y/scale-drawvalue.ui b/tests/a11y/scale-drawvalue.ui
deleted file mode 100644 (file)
index ad6abbe..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<interface>
-  <!-- interface-requires gtk+ 3.0 -->
-  <object class="GtkAdjustment" id="adjustment1">
-    <property name="lower">-100</property>
-    <property name="upper">100</property>
-    <property name="value">-42</property>
-    <property name="step_increment">1</property>
-    <property name="page_increment">10</property>
-  </object>
-  <object class="GtkWindow" id="window1">
-    <property name="can_focus">False</property>
-    <child>
-      <object class="GtkScale" id="scale1">
-        <property name="width-request">100</property>
-        <property name="visible">True</property>
-        <property name="can_focus">True</property>
-        <property name="adjustment">adjustment1</property>
-        <property name="round_digits">1</property>
-      </object>
-    </child>
-  </object>
-</interface>
diff --git a/tests/a11y/spinner.txt b/tests/a11y/spinner.txt
deleted file mode 100644 (file)
index dd7c9f0..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-window1
-  "window"
-  index: 0
-  state: enabled resizable sensitive showing visible
-  toolkit: gtk
-  <AtkComponent>
-  layer: window
-  alpha: 1
-  spinner1
-    "animation"
-    parent: window1
-    index: 0
-    name: Spinner
-    description: Provides visual indication of progress
-    state: enabled sensitive showing visible
-    toolkit: gtk
-    <AtkComponent>
-    layer: widget
-    alpha: 1
-    <AtkImage>
-    image size: 12 x 12
-    image description: (null)
diff --git a/tests/a11y/spinner.ui b/tests/a11y/spinner.ui
deleted file mode 100644 (file)
index 3873564..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<interface>
-  <!-- interface-requires gtk+ 3.0 -->
-  <object class="GtkWindow" id="window1">
-    <property name="can_focus">False</property>
-    <property name="type">popup</property>
-    <child>
-      <object class="GtkSpinner" id="spinner1">
-        <property name="visible">True</property>
-        <property name="active">True</property>
-      </object>
-    </child>
-  </object>
-</interface>
diff --git a/tests/a11y/statusbar.txt b/tests/a11y/statusbar.txt
deleted file mode 100644 (file)
index f98fc9a..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-window1
-  "window"
-  index: 0
-  state: enabled resizable sensitive showing visible
-  toolkit: gtk
-  <AtkComponent>
-  layer: window
-  alpha: 1
-  statusbar1
-    "statusbar"
-    parent: window1
-    index: 0
-    name: 
-    state: enabled horizontal sensitive showing visible
-    toolkit: gtk
-    <AtkComponent>
-    layer: widget
-    alpha: 1
diff --git a/tests/a11y/statusbar.ui b/tests/a11y/statusbar.ui
deleted file mode 100644 (file)
index bc635bc..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<interface>
-  <!-- interface-requires gtk+ 3.0 -->
-  <object class="GtkWindow" id="window1">
-    <property name="can_focus">False</property>
-    <property name="type">popup</property>
-    <child>
-      <object class="GtkStatusbar" id="statusbar1">
-        <property name="visible">True</property>
-      </object>
-    </child>
-  </object>
-</interface>
diff --git a/tests/a11y/testfocus.c b/tests/a11y/testfocus.c
deleted file mode 100644 (file)
index c438f6d..0000000
+++ /dev/null
@@ -1,117 +0,0 @@
-#include <gtk/gtk.h>
-
-static const gchar *
-get_name (gpointer obj)
-{
-  GtkWidget *widget;
-  if (obj == NULL)
-    return "(nil)";
-  else if (GTK_IS_WIDGET (obj))
-    widget = GTK_WIDGET (obj);
-  else if (GTK_IS_ACCESSIBLE (obj))
-    widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (obj));
-  else
-    return "OOPS";
-  if (GTK_IS_BUILDABLE (widget))
-    return gtk_buildable_get_name (GTK_BUILDABLE (widget));
-  else
-    return G_OBJECT_TYPE_NAME (widget);
-}
-
-static gboolean
-compare_focus (gpointer data)
-{
-  AtkObject *atk_focus;
-  AtkObject *gtk_focus;
-  GtkWidget *focus_widget;
-  GList *list, *l;
-
-  atk_focus = atk_get_focus_object ();
-
-  focus_widget = NULL;
-  list = gtk_window_list_toplevels ();
-  for (l = list; l; l = l->next)
-    {
-      GtkWindow *w = l->data;
-      if (gtk_window_is_active (w))
-        {
-          focus_widget = gtk_window_get_focus (w);
-          break;
-        }
-    }
-  g_list_free (list);
-
-  if (GTK_IS_WIDGET (focus_widget))
-    gtk_focus = gtk_widget_get_accessible (focus_widget);
-  else
-    gtk_focus = NULL;
-
-  if (gtk_focus != atk_focus)
-    g_print ("gtk focus: %s != atk focus: %s\n",
-             get_name (gtk_focus), get_name (atk_focus));
-
-  return G_SOURCE_CONTINUE;
-}
-
-static void
-notify_cb (GObject *obj, GParamSpec *pspec, gpointer data)
-{
-  gboolean value;
-
-  if (g_strcmp0 (pspec->name, "has-focus") != 0)
-    return;
-
-  g_object_get (obj, "has-focus", &value, NULL);
-  g_print ("widget %s %p has-focus -> %d\n", get_name (obj), obj, value);
-}
-
-static void
-state_change_cb (AtkObject *obj, const gchar *name, gboolean state_set)
-{
-  AtkStateSet *set;
-
-  set = atk_object_ref_state_set (obj);
-  g_print ("accessible %s %p focused -> %d\n", get_name (obj), obj,
-           atk_state_set_contains_state (set, ATK_STATE_FOCUSED));
-  g_object_unref (set);
-}
-
-int
-main (int argc, char *argv[])
-{
-  GtkBuilder *builder;
-  GtkWidget *window;
-  GSList *o, *l;
-  GtkWidget *widget;
-  AtkObject *accessible;
-
-  gtk_init (&argc, &argv);
-
-  builder = gtk_builder_new ();
-  gtk_builder_add_from_file (builder, argv[1], NULL);
-
-  window = (GtkWidget *)gtk_builder_get_object (builder, "window1");
-
-  o = gtk_builder_get_objects (builder);
-  for (l = o; l;l = l->next)
-    {
-       if (!GTK_IS_WIDGET (l->data))
-         continue;
-
-       widget = l->data;
-       g_signal_connect (widget, "notify::has-focus", G_CALLBACK (notify_cb), NULL);
-       accessible = gtk_widget_get_accessible (widget);
-       g_signal_connect (accessible, "state-change::focused", G_CALLBACK (state_change_cb), NULL);
-
-    }
-  g_slist_free (o);
-
-  g_timeout_add (100, compare_focus, NULL);
-
-  gtk_widget_show_all (window);
-
-  gtk_main ();
-
-  return 0;
-}
-
diff --git a/tests/a11y/text.c b/tests/a11y/text.c
deleted file mode 100644 (file)
index c18c823..0000000
+++ /dev/null
@@ -1,1045 +0,0 @@
-/*
- * Copyright (C) 2011 Red Hat Inc.
- *
- * Author:
- *      Matthias Clasen <mclasen@redhat.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include <gtk/gtk.h>
-#include <string.h>
-
-static void
-set_text (GtkWidget   *widget,
-          const gchar *text)
-{
-  if (GTK_IS_LABEL (widget))
-    gtk_label_set_text (GTK_LABEL (widget), text);
-  else if (GTK_IS_ENTRY (widget))
-    gtk_entry_set_text (GTK_ENTRY (widget), text);
-  else if (GTK_IS_TEXT_VIEW (widget))
-    gtk_text_buffer_set_text (gtk_text_view_get_buffer (GTK_TEXT_VIEW (widget)), text, -1);
-  else
-    g_assert_not_reached ();
-}
-
-static void
-test_basic (GtkWidget *widget)
-{
-  AtkText *atk_text;
-  const gchar *text = "Text goes here";
-  gchar *ret;
-  gint count;
-  gunichar c;
-
-  atk_text = ATK_TEXT (gtk_widget_get_accessible (widget));
-
-  set_text (widget, text);
-  ret = atk_text_get_text (atk_text, 5, 9);
-  g_assert_cmpstr (ret, ==, "goes");
-  g_free (ret);
-
-  ret = atk_text_get_text (atk_text, 0, 14);
-  g_assert_cmpstr (ret, ==, text);
-  g_free (ret);
-
-  ret = atk_text_get_text (atk_text, 0, -1);
-  g_assert_cmpstr (ret, ==, text);
-  g_free (ret);
-
-  count = atk_text_get_character_count (atk_text);
-  g_assert_cmpint (count, ==, g_utf8_strlen (text, -1));
-
-  c = atk_text_get_character_at_offset (atk_text, 0);
-  g_assert_cmpint (c, ==, 'T');
-
-  c = atk_text_get_character_at_offset (atk_text, 13);
-  g_assert_cmpint (c, ==, 'e');
-}
-
-typedef struct {
-  gint count;
-  gint position;
-  gint length;
-} SignalData;
-
-static void
-text_deleted (AtkText *atk_text, gint position, gint length, SignalData *data)
-{
-  data->count++;
-  data->position = position;
-  data->length = length;
-}
-
-static void
-text_inserted (AtkText *atk_text, gint position, gint length, SignalData *data)
-{
-  data->count++;
-  data->position = position;
-  data->length = length;
-}
-
-static void
-test_text_changed (GtkWidget *widget)
-{
-  AtkText *atk_text;
-  const gchar *text = "Text goes here";
-  const gchar *text2 = "Text again";
-  SignalData delete_data;
-  SignalData insert_data;
-
-  atk_text = ATK_TEXT (gtk_widget_get_accessible (widget));
-
-  delete_data.count = 0;
-  insert_data.count = 0;
-
-  g_signal_connect (atk_text, "text_changed::delete",
-                    G_CALLBACK (text_deleted), &delete_data);
-  g_signal_connect (atk_text, "text_changed::insert",
-                    G_CALLBACK (text_inserted), &insert_data);
-
-  set_text (widget, text);
-
-  g_assert_cmpint (delete_data.count, ==, 0);
-
-  g_assert_cmpint (insert_data.count, ==, 1);
-  g_assert_cmpint (insert_data.position, ==, 0);
-  g_assert_cmpint (insert_data.length, ==, g_utf8_strlen (text, -1));
-
-  set_text (widget, text2);
-
-  g_assert_cmpint (delete_data.count, ==, 1);
-  g_assert_cmpint (delete_data.position, ==, 0);
-  g_assert_cmpint (delete_data.length, ==, g_utf8_strlen (text, -1));
-
-  g_assert_cmpint (insert_data.count, ==, 2);
-  g_assert_cmpint (insert_data.position, ==, 0);
-  g_assert_cmpint (insert_data.length, ==, g_utf8_strlen (text2, -1));
-
-  set_text (widget, "");
-
-  g_assert_cmpint (delete_data.count, ==, 2);
-  g_assert_cmpint (delete_data.position, ==, 0);
-  g_assert_cmpint (delete_data.length, ==, g_utf8_strlen (text2, -1));
-
-  g_assert_cmpint (insert_data.count, ==, 2);
-
-  g_signal_handlers_disconnect_by_func (atk_text, G_CALLBACK (text_deleted), &delete_data);
-  g_signal_handlers_disconnect_by_func (atk_text, G_CALLBACK (text_inserted), &insert_data);
-}
-
-typedef struct {
-  gint gravity;
-  gint offset;
-  AtkTextBoundary boundary;
-  gint start;
-  gint end;
-  const gchar *word;
-} Word;
-
-#ifdef DUMP_RESULTS
-static const gchar *
-boundary (AtkTextBoundary b)
-{
-  switch (b)
-    {
-    case ATK_TEXT_BOUNDARY_CHAR:           return "ATK_TEXT_BOUNDARY_CHAR,          ";
-    case ATK_TEXT_BOUNDARY_WORD_START:     return "ATK_TEXT_BOUNDARY_WORD_START,    ";
-    case ATK_TEXT_BOUNDARY_WORD_END:       return "ATK_TEXT_BOUNDARY_WORD_END,      ";
-    case ATK_TEXT_BOUNDARY_SENTENCE_START: return "ATK_TEXT_BOUNDARY_SENTENCE_START,";
-    case ATK_TEXT_BOUNDARY_SENTENCE_END:   return "ATK_TEXT_BOUNDARY_SENTENCE_END,  ";
-    case ATK_TEXT_BOUNDARY_LINE_START:     return "ATK_TEXT_BOUNDARY_LINE_START,    ";
-    case ATK_TEXT_BOUNDARY_LINE_END:       return "ATK_TEXT_BOUNDARY_LINE_END,      ";
-    default: g_assert_not_reached ();
-    }
-}
-
-static const gchar *
-gravity (gint g)
-{
-  if (g < 0) return "before";
-  else if (g > 0) return "after";
-  else return "around";
-}
-
-const gchar *
-char_rep (gunichar c)
-{
-  static gchar out[6];
-
-  switch (c)
-    {
-      case '\n': return "\\n";
-      case 196: return "?";
-      case 214: return "?";
-      case 220: return "?";
-      default:
-        memset (out, 0, 6);
-        g_unichar_to_utf8 (c, out);
-        return out;
-    }
-}
-
-gchar *
-escape (const gchar *p)
-{
-  GString *s;
-
-  s = g_string_new ("");
-
-  while (*p)
-    {
-      if (*p == '\n')
-        g_string_append (s, "\\n");
-      else
-        g_string_append_c (s, *p);
-      p++;
-    }
-
-  return g_string_free (s, FALSE);
-}
-#endif
-
-#ifdef SHOW_TEXT_ATTRIBUTES
-static void
-show_text_attributes (PangoLayout *l)
-{
-  const PangoLogAttr *attr;
-  gint n_attrs;
-  const gchar *s;
-  gchar e;
-  const gchar *p;
-  gint i;
-  const gchar *text;
-  GSList *lines, *li;
-  glong so, eo;
-
-  printf ("\n");
-
-  text = pango_layout_get_text (l);
-  attr = pango_layout_get_log_attrs_readonly (l, &n_attrs);
-
-  p = text;
-  while (*p)
-    {
-      s = char_rep (g_utf8_get_char (p));
-      printf (" %s", s);
-      p = g_utf8_next_char (p);
-    }
-  printf ("\n");
-  p = text;
-  i = 0;
-  do
-    {
-      if (*p)
-        s = char_rep (g_utf8_get_char (p));
-      else
-        s = "";
-      if (attr[i].is_word_start && attr[i].is_word_end)
-        e = '|';
-      else if (attr[i].is_word_start)
-        e = '<';
-      else if (attr[i].is_word_end)
-        e = '>';
-      else
-        e = ' ';
-      printf ("%c%*s", e, strlen (s), "");
-      if (*p)
-        p = g_utf8_next_char (p);
-      i++;
-    }
-  while (*p || i < n_attrs);
-  printf ("\n");
-
-  p = text;
-  i = 0;
-  do
-    {
-      if (*p)
-        s = char_rep (g_utf8_get_char (p));
-      else
-        s = "";
-      if (attr[i].is_sentence_start && attr[i].is_sentence_end)
-        e = '|';
-      else if (attr[i].is_sentence_start)
-        e = '<';
-      else if (attr[i].is_sentence_end)
-        e = '>';
-      else
-        e = ' ';
-      printf ("%c%*s", e, strlen (s), "");
-      if (*p)
-        p = g_utf8_next_char (p);
-      i++;
-    }
-  while (*p || i < n_attrs);
-  printf ("\n");
-
-  lines = pango_layout_get_lines_readonly (l);
-  p = text;
-  i = 0;
-  do
-    {
-      gboolean start, end;
-
-      if (*p)
-        s = char_rep (g_utf8_get_char (p));
-      else
-        s = "";
-      start = end = FALSE;
-      for (li = lines; li; li = li->next)
-        {
-          PangoLayoutLine *line = li->data;
-          so = g_utf8_pointer_to_offset (text, text + line->start_index);
-          eo = g_utf8_pointer_to_offset (text, text + line->start_index + line->length);
-          if (so == i)
-            start = TRUE;
-          if (eo == i)
-            end = TRUE;
-        }
-      if (start && end)
-        e = '|';
-      else if (start)
-        e = '<';
-      else if (end)
-        e = '>';
-      else
-        e = ' ';
-      printf ("%c%*s", e, strlen (s), "");
-      if (*p)
-        p = g_utf8_next_char (p);
-      i++;
-    }
-  while (*p || i < n_attrs);
-  printf ("\n");
-}
-#endif
-
-static void
-test_words (GtkWidget *widget)
-{
-  AtkText *atk_text;
-  const gchar *text = "abc! def\nghi jkl\nmno";
-  Word expected[] = {
-    { -1,  0, ATK_TEXT_BOUNDARY_CHAR,            0,  0, "" },
-    { -1,  1, ATK_TEXT_BOUNDARY_CHAR,            0,  1, "a" },
-    { -1,  2, ATK_TEXT_BOUNDARY_CHAR,            1,  2, "b" },
-    { -1,  3, ATK_TEXT_BOUNDARY_CHAR,            2,  3, "c" },
-    { -1,  4, ATK_TEXT_BOUNDARY_CHAR,            3,  4, "!" },
-    { -1,  5, ATK_TEXT_BOUNDARY_CHAR,            4,  5, " " },
-    { -1,  6, ATK_TEXT_BOUNDARY_CHAR,            5,  6, "d" },
-    { -1,  7, ATK_TEXT_BOUNDARY_CHAR,            6,  7, "e" },
-    { -1,  8, ATK_TEXT_BOUNDARY_CHAR,            7,  8, "f" },
-    { -1,  9, ATK_TEXT_BOUNDARY_CHAR,            8,  9, "\n" },
-    { -1, 10, ATK_TEXT_BOUNDARY_CHAR,            9, 10, "g" },
-    { -1, 11, ATK_TEXT_BOUNDARY_CHAR,           10, 11, "h" },
-    { -1, 12, ATK_TEXT_BOUNDARY_CHAR,           11, 12, "i" },
-    { -1, 13, ATK_TEXT_BOUNDARY_CHAR,           12, 13, " " },
-    { -1, 14, ATK_TEXT_BOUNDARY_CHAR,           13, 14, "j" },
-    { -1, 15, ATK_TEXT_BOUNDARY_CHAR,           14, 15, "k" },
-    { -1, 16, ATK_TEXT_BOUNDARY_CHAR,           15, 16, "l" },
-    { -1, 17, ATK_TEXT_BOUNDARY_CHAR,           16, 17, "\n" },
-    { -1, 18, ATK_TEXT_BOUNDARY_CHAR,           17, 18, "m" },
-    { -1, 19, ATK_TEXT_BOUNDARY_CHAR,           18, 19, "n" },
-    { -1, 20, ATK_TEXT_BOUNDARY_CHAR,           19, 20, "o" },
-    { -1,  0, ATK_TEXT_BOUNDARY_WORD_START,      0,  0, "" },
-    { -1,  1, ATK_TEXT_BOUNDARY_WORD_START,      0,  0, "" },
-    { -1,  2, ATK_TEXT_BOUNDARY_WORD_START,      0,  0, "" },
-    { -1,  3, ATK_TEXT_BOUNDARY_WORD_START,      0,  0, "" },
-    { -1,  4, ATK_TEXT_BOUNDARY_WORD_START,      0,  0, "" },
-    { -1,  5, ATK_TEXT_BOUNDARY_WORD_START,      0,  5, "abc! " },
-    { -1,  6, ATK_TEXT_BOUNDARY_WORD_START,      0,  5, "abc! " },
-    { -1,  7, ATK_TEXT_BOUNDARY_WORD_START,      0,  5, "abc! " },
-    { -1,  8, ATK_TEXT_BOUNDARY_WORD_START,      0,  5, "abc! " },
-    { -1,  9, ATK_TEXT_BOUNDARY_WORD_START,      5,  9, "def\n" },
-    { -1, 10, ATK_TEXT_BOUNDARY_WORD_START,      5,  9, "def\n" },
-    { -1, 11, ATK_TEXT_BOUNDARY_WORD_START,      5,  9, "def\n" },
-    { -1, 12, ATK_TEXT_BOUNDARY_WORD_START,      5,  9, "def\n" },
-    { -1, 13, ATK_TEXT_BOUNDARY_WORD_START,      9, 13, "ghi " },
-    { -1, 14, ATK_TEXT_BOUNDARY_WORD_START,      9, 13, "ghi " },
-    { -1, 15, ATK_TEXT_BOUNDARY_WORD_START,      9, 13, "ghi " },
-    { -1, 16, ATK_TEXT_BOUNDARY_WORD_START,      9, 13, "ghi " },
-    { -1, 17, ATK_TEXT_BOUNDARY_WORD_START,     13, 17, "jkl\n" },
-    { -1, 18, ATK_TEXT_BOUNDARY_WORD_START,     13, 17, "jkl\n" },
-    { -1, 19, ATK_TEXT_BOUNDARY_WORD_START,     13, 17, "jkl\n" },
-    { -1, 20, ATK_TEXT_BOUNDARY_WORD_START,     13, 17, "jkl\n" },
-    { -1,  0, ATK_TEXT_BOUNDARY_WORD_END,        0,  0, "" },
-    { -1,  1, ATK_TEXT_BOUNDARY_WORD_END,        0,  0, "" },
-    { -1,  2, ATK_TEXT_BOUNDARY_WORD_END,        0,  0, "" },
-    { -1,  3, ATK_TEXT_BOUNDARY_WORD_END,        0,  3, "abc" },
-    { -1,  4, ATK_TEXT_BOUNDARY_WORD_END,        0,  3, "abc" },
-    { -1,  5, ATK_TEXT_BOUNDARY_WORD_END,        0,  3, "abc" },
-    { -1,  6, ATK_TEXT_BOUNDARY_WORD_END,        0,  3, "abc" },
-    { -1,  7, ATK_TEXT_BOUNDARY_WORD_END,        0,  3, "abc" },
-    { -1,  8, ATK_TEXT_BOUNDARY_WORD_END,        3,  8, "! def" },
-    { -1,  9, ATK_TEXT_BOUNDARY_WORD_END,        3,  8, "! def" },
-    { -1, 10, ATK_TEXT_BOUNDARY_WORD_END,        3,  8, "! def" },
-    { -1, 11, ATK_TEXT_BOUNDARY_WORD_END,        3,  8, "! def" },
-    { -1, 12, ATK_TEXT_BOUNDARY_WORD_END,        8, 12, "\nghi" },
-    { -1, 13, ATK_TEXT_BOUNDARY_WORD_END,        8, 12, "\nghi" },
-    { -1, 14, ATK_TEXT_BOUNDARY_WORD_END,        8, 12, "\nghi" },
-    { -1, 15, ATK_TEXT_BOUNDARY_WORD_END,        8, 12, "\nghi" },
-    { -1, 16, ATK_TEXT_BOUNDARY_WORD_END,       12, 16, " jkl" },
-    { -1, 17, ATK_TEXT_BOUNDARY_WORD_END,       12, 16, " jkl" },
-    { -1, 18, ATK_TEXT_BOUNDARY_WORD_END,       12, 16, " jkl" },
-    { -1, 19, ATK_TEXT_BOUNDARY_WORD_END,       12, 16, " jkl" },
-    { -1, 20, ATK_TEXT_BOUNDARY_WORD_END,       16, 20, "\nmno" },
-    { -1,  0, ATK_TEXT_BOUNDARY_SENTENCE_START,  0,  0, "" },
-    { -1,  1, ATK_TEXT_BOUNDARY_SENTENCE_START,  0,  0, "" },
-    { -1,  2, ATK_TEXT_BOUNDARY_SENTENCE_START,  0,  0, "" },
-    { -1,  3, ATK_TEXT_BOUNDARY_SENTENCE_START,  0,  0, "" },
-    { -1,  4, ATK_TEXT_BOUNDARY_SENTENCE_START,  0,  0, "" },
-    { -1,  5, ATK_TEXT_BOUNDARY_SENTENCE_START,  0,  5, "abc! " },
-    { -1,  6, ATK_TEXT_BOUNDARY_SENTENCE_START,  0,  5, "abc! " },
-    { -1,  7, ATK_TEXT_BOUNDARY_SENTENCE_START,  0,  5, "abc! " },
-    { -1,  8, ATK_TEXT_BOUNDARY_SENTENCE_START,  0,  5, "abc! " },
-    { -1,  9, ATK_TEXT_BOUNDARY_SENTENCE_START,  5,  9, "def\n" },
-    { -1, 10, ATK_TEXT_BOUNDARY_SENTENCE_START,  5,  9, "def\n" },
-    { -1, 11, ATK_TEXT_BOUNDARY_SENTENCE_START,  5,  9, "def\n" },
-    { -1, 12, ATK_TEXT_BOUNDARY_SENTENCE_START,  5,  9, "def\n" },
-    { -1, 13, ATK_TEXT_BOUNDARY_SENTENCE_START,  5,  9, "def\n" },
-    { -1, 14, ATK_TEXT_BOUNDARY_SENTENCE_START,  5,  9, "def\n" },
-    { -1, 15, ATK_TEXT_BOUNDARY_SENTENCE_START,  5,  9, "def\n" },
-    { -1, 16, ATK_TEXT_BOUNDARY_SENTENCE_START,  5,  9, "def\n" },
-    { -1, 17, ATK_TEXT_BOUNDARY_SENTENCE_START,  9, 17, "ghi jkl\n" },
-    { -1, 18, ATK_TEXT_BOUNDARY_SENTENCE_START,  9, 17, "ghi jkl\n" },
-    { -1, 19, ATK_TEXT_BOUNDARY_SENTENCE_START,  9, 17, "ghi jkl\n" },
-    { -1, 20, ATK_TEXT_BOUNDARY_SENTENCE_START,  9, 17, "ghi jkl\n" },
-    { -1,  0, ATK_TEXT_BOUNDARY_SENTENCE_END,    0,  0, "" },
-    { -1,  1, ATK_TEXT_BOUNDARY_SENTENCE_END,    0,  0, "" },
-    { -1,  2, ATK_TEXT_BOUNDARY_SENTENCE_END,    0,  0, "" },
-    { -1,  3, ATK_TEXT_BOUNDARY_SENTENCE_END,    0,  0, "" },
-    { -1,  4, ATK_TEXT_BOUNDARY_SENTENCE_END,    0,  4, "abc!" },
-    { -1,  5, ATK_TEXT_BOUNDARY_SENTENCE_END,    0,  4, "abc!" },
-    { -1,  6, ATK_TEXT_BOUNDARY_SENTENCE_END,    0,  4, "abc!" },
-    { -1,  7, ATK_TEXT_BOUNDARY_SENTENCE_END,    0,  4, "abc!" },
-    { -1,  8, ATK_TEXT_BOUNDARY_SENTENCE_END,    4,  8, " def" },
-    { -1,  9, ATK_TEXT_BOUNDARY_SENTENCE_END,    4,  8, " def" },
-    { -1, 10, ATK_TEXT_BOUNDARY_SENTENCE_END,    4,  8, " def" },
-    { -1, 11, ATK_TEXT_BOUNDARY_SENTENCE_END,    4,  8, " def" },
-    { -1, 12, ATK_TEXT_BOUNDARY_SENTENCE_END,    4,  8, " def" },
-    { -1, 13, ATK_TEXT_BOUNDARY_SENTENCE_END,    4,  8, " def" },
-    { -1, 14, ATK_TEXT_BOUNDARY_SENTENCE_END,    4,  8, " def" },
-    { -1, 15, ATK_TEXT_BOUNDARY_SENTENCE_END,    4,  8, " def" },
-    { -1, 16, ATK_TEXT_BOUNDARY_SENTENCE_END,    8, 16, "\nghi jkl" },
-    { -1, 17, ATK_TEXT_BOUNDARY_SENTENCE_END,    8, 16, "\nghi jkl" },
-    { -1, 18, ATK_TEXT_BOUNDARY_SENTENCE_END,    8, 16, "\nghi jkl" },
-    { -1, 19, ATK_TEXT_BOUNDARY_SENTENCE_END,    8, 16, "\nghi jkl" },
-    { -1, 20, ATK_TEXT_BOUNDARY_SENTENCE_END,   16, 20, "\nmno" },
-    { -1,  0, ATK_TEXT_BOUNDARY_LINE_START,      0,  0, "" },
-    { -1,  1, ATK_TEXT_BOUNDARY_LINE_START,      0,  0, "" },
-    { -1,  2, ATK_TEXT_BOUNDARY_LINE_START,      0,  0, "" },
-    { -1,  3, ATK_TEXT_BOUNDARY_LINE_START,      0,  0, "" },
-    { -1,  4, ATK_TEXT_BOUNDARY_LINE_START,      0,  0, "" },
-    { -1,  5, ATK_TEXT_BOUNDARY_LINE_START,      0,  0, "" },
-    { -1,  6, ATK_TEXT_BOUNDARY_LINE_START,      0,  0, "" },
-    { -1,  7, ATK_TEXT_BOUNDARY_LINE_START,      0,  0, "" },
-    { -1,  8, ATK_TEXT_BOUNDARY_LINE_START,      0,  0, "" },
-    { -1,  9, ATK_TEXT_BOUNDARY_LINE_START,      0,  9, "abc! def\n" },
-    { -1, 10, ATK_TEXT_BOUNDARY_LINE_START,      0,  9, "abc! def\n" },
-    { -1, 11, ATK_TEXT_BOUNDARY_LINE_START,      0,  9, "abc! def\n" },
-    { -1, 12, ATK_TEXT_BOUNDARY_LINE_START,      0,  9, "abc! def\n" },
-    { -1, 13, ATK_TEXT_BOUNDARY_LINE_START,      0,  9, "abc! def\n" },
-    { -1, 14, ATK_TEXT_BOUNDARY_LINE_START,      0,  9, "abc! def\n" },
-    { -1, 15, ATK_TEXT_BOUNDARY_LINE_START,      0,  9, "abc! def\n" },
-    { -1, 16, ATK_TEXT_BOUNDARY_LINE_START,      0,  9, "abc! def\n" },
-    { -1, 17, ATK_TEXT_BOUNDARY_LINE_START,      9, 17, "ghi jkl\n" },
-    { -1, 18, ATK_TEXT_BOUNDARY_LINE_START,      9, 17, "ghi jkl\n" },
-    { -1, 19, ATK_TEXT_BOUNDARY_LINE_START,      9, 17, "ghi jkl\n" },
-    { -1, 20, ATK_TEXT_BOUNDARY_LINE_START,      9, 17, "ghi jkl\n" },
-    { -1,  0, ATK_TEXT_BOUNDARY_LINE_END,        0,  0, "" },
-    { -1,  1, ATK_TEXT_BOUNDARY_LINE_END,        0,  0, "" },
-    { -1,  2, ATK_TEXT_BOUNDARY_LINE_END,        0,  0, "" },
-    { -1,  3, ATK_TEXT_BOUNDARY_LINE_END,        0,  0, "" },
-    { -1,  4, ATK_TEXT_BOUNDARY_LINE_END,        0,  0, "" },
-    { -1,  5, ATK_TEXT_BOUNDARY_LINE_END,        0,  0, "" },
-    { -1,  6, ATK_TEXT_BOUNDARY_LINE_END,        0,  0, "" },
-    { -1,  7, ATK_TEXT_BOUNDARY_LINE_END,        0,  0, "" },
-    { -1,  8, ATK_TEXT_BOUNDARY_LINE_END,        0,  0, "" },
-    { -1,  9, ATK_TEXT_BOUNDARY_LINE_END,        0,  8, "abc! def" },
-    { -1, 10, ATK_TEXT_BOUNDARY_LINE_END,        0,  8, "abc! def" },
-    { -1, 11, ATK_TEXT_BOUNDARY_LINE_END,        0,  8, "abc! def" },
-    { -1, 12, ATK_TEXT_BOUNDARY_LINE_END,        0,  8, "abc! def" },
-    { -1, 13, ATK_TEXT_BOUNDARY_LINE_END,        0,  8, "abc! def" },
-    { -1, 14, ATK_TEXT_BOUNDARY_LINE_END,        0,  8, "abc! def" },
-    { -1, 15, ATK_TEXT_BOUNDARY_LINE_END,        0,  8, "abc! def" },
-    { -1, 16, ATK_TEXT_BOUNDARY_LINE_END,        0,  8, "abc! def" },
-    { -1, 17, ATK_TEXT_BOUNDARY_LINE_END,        8, 16, "\nghi jkl" },
-    { -1, 18, ATK_TEXT_BOUNDARY_LINE_END,        8, 16, "\nghi jkl" },
-    { -1, 19, ATK_TEXT_BOUNDARY_LINE_END,        8, 16, "\nghi jkl" },
-    { -1, 20, ATK_TEXT_BOUNDARY_LINE_END,        8, 16, "\nghi jkl" },
-    {  0,  0, ATK_TEXT_BOUNDARY_CHAR,            0,  1, "a" },
-    {  0,  1, ATK_TEXT_BOUNDARY_CHAR,            1,  2, "b" },
-    {  0,  2, ATK_TEXT_BOUNDARY_CHAR,            2,  3, "c" },
-    {  0,  3, ATK_TEXT_BOUNDARY_CHAR,            3,  4, "!" },
-    {  0,  4, ATK_TEXT_BOUNDARY_CHAR,            4,  5, " " },
-    {  0,  5, ATK_TEXT_BOUNDARY_CHAR,            5,  6, "d" },
-    {  0,  6, ATK_TEXT_BOUNDARY_CHAR,            6,  7, "e" },
-    {  0,  7, ATK_TEXT_BOUNDARY_CHAR,            7,  8, "f" },
-    {  0,  8, ATK_TEXT_BOUNDARY_CHAR,            8,  9, "\n" },
-    {  0,  9, ATK_TEXT_BOUNDARY_CHAR,            9, 10, "g" },
-    {  0, 10, ATK_TEXT_BOUNDARY_CHAR,           10, 11, "h" },
-    {  0, 11, ATK_TEXT_BOUNDARY_CHAR,           11, 12, "i" },
-    {  0, 12, ATK_TEXT_BOUNDARY_CHAR,           12, 13, " " },
-    {  0, 13, ATK_TEXT_BOUNDARY_CHAR,           13, 14, "j" },
-    {  0, 14, ATK_TEXT_BOUNDARY_CHAR,           14, 15, "k" },
-    {  0, 15, ATK_TEXT_BOUNDARY_CHAR,           15, 16, "l" },
-    {  0, 16, ATK_TEXT_BOUNDARY_CHAR,           16, 17, "\n" },
-    {  0, 17, ATK_TEXT_BOUNDARY_CHAR,           17, 18, "m" },
-    {  0, 18, ATK_TEXT_BOUNDARY_CHAR,           18, 19, "n" },
-    {  0, 19, ATK_TEXT_BOUNDARY_CHAR,           19, 20, "o" },
-    {  0, 20, ATK_TEXT_BOUNDARY_CHAR,           20, 20, "" },
-    {  0,  0, ATK_TEXT_BOUNDARY_WORD_START,      0,  5, "abc! " },
-    {  0,  1, ATK_TEXT_BOUNDARY_WORD_START,      0,  5, "abc! " },
-    {  0,  2, ATK_TEXT_BOUNDARY_WORD_START,      0,  5, "abc! " },
-    {  0,  3, ATK_TEXT_BOUNDARY_WORD_START,      0,  5, "abc! " },
-    {  0,  4, ATK_TEXT_BOUNDARY_WORD_START,      0,  5, "abc! " },
-    {  0,  5, ATK_TEXT_BOUNDARY_WORD_START,      5,  9, "def\n" },
-    {  0,  6, ATK_TEXT_BOUNDARY_WORD_START,      5,  9, "def\n" },
-    {  0,  7, ATK_TEXT_BOUNDARY_WORD_START,      5,  9, "def\n" },
-    {  0,  8, ATK_TEXT_BOUNDARY_WORD_START,      5,  9, "def\n" },
-    {  0,  9, ATK_TEXT_BOUNDARY_WORD_START,      9, 13, "ghi " },
-    {  0, 10, ATK_TEXT_BOUNDARY_WORD_START,      9, 13, "ghi " },
-    {  0, 11, ATK_TEXT_BOUNDARY_WORD_START,      9, 13, "ghi " },
-    {  0, 12, ATK_TEXT_BOUNDARY_WORD_START,      9, 13, "ghi " },
-    {  0, 13, ATK_TEXT_BOUNDARY_WORD_START,     13, 17, "jkl\n" },
-    {  0, 14, ATK_TEXT_BOUNDARY_WORD_START,     13, 17, "jkl\n" },
-    {  0, 15, ATK_TEXT_BOUNDARY_WORD_START,     13, 17, "jkl\n" },
-    {  0, 16, ATK_TEXT_BOUNDARY_WORD_START,     13, 17, "jkl\n" },
-    {  0, 17, ATK_TEXT_BOUNDARY_WORD_START,     17, 20, "mno" },
-    {  0, 18, ATK_TEXT_BOUNDARY_WORD_START,     17, 20, "mno" },
-    {  0, 19, ATK_TEXT_BOUNDARY_WORD_START,     17, 20, "mno" },
-    {  0, 20, ATK_TEXT_BOUNDARY_WORD_START,     17, 20, "mno" },
-    {  0,  0, ATK_TEXT_BOUNDARY_WORD_END,        0,  3, "abc" },
-    {  0,  1, ATK_TEXT_BOUNDARY_WORD_END,        0,  3, "abc" },
-    {  0,  2, ATK_TEXT_BOUNDARY_WORD_END,        0,  3, "abc" },
-    {  0,  3, ATK_TEXT_BOUNDARY_WORD_END,        3,  8, "! def" },
-    {  0,  4, ATK_TEXT_BOUNDARY_WORD_END,        3,  8, "! def" },
-    {  0,  5, ATK_TEXT_BOUNDARY_WORD_END,        3,  8, "! def" },
-    {  0,  6, ATK_TEXT_BOUNDARY_WORD_END,        3,  8, "! def" },
-    {  0,  7, ATK_TEXT_BOUNDARY_WORD_END,        3,  8, "! def" },
-    {  0,  8, ATK_TEXT_BOUNDARY_WORD_END,        8, 12, "\nghi" },
-    {  0,  9, ATK_TEXT_BOUNDARY_WORD_END,        8, 12, "\nghi" },
-    {  0, 10, ATK_TEXT_BOUNDARY_WORD_END,        8, 12, "\nghi" },
-    {  0, 11, ATK_TEXT_BOUNDARY_WORD_END,        8, 12, "\nghi" },
-    {  0, 12, ATK_TEXT_BOUNDARY_WORD_END,       12, 16, " jkl" },
-    {  0, 13, ATK_TEXT_BOUNDARY_WORD_END,       12, 16, " jkl" },
-    {  0, 14, ATK_TEXT_BOUNDARY_WORD_END,       12, 16, " jkl" },
-    {  0, 15, ATK_TEXT_BOUNDARY_WORD_END,       12, 16, " jkl" },
-    {  0, 16, ATK_TEXT_BOUNDARY_WORD_END,       16, 20, "\nmno" },
-    {  0, 17, ATK_TEXT_BOUNDARY_WORD_END,       16, 20, "\nmno" },
-    {  0, 18, ATK_TEXT_BOUNDARY_WORD_END,       16, 20, "\nmno" },
-    {  0, 19, ATK_TEXT_BOUNDARY_WORD_END,       16, 20, "\nmno" },
-    {  0, 20, ATK_TEXT_BOUNDARY_WORD_END,       20, 20, "" },
-    {  0,  0, ATK_TEXT_BOUNDARY_SENTENCE_START,  0,  5, "abc! " },
-    {  0,  1, ATK_TEXT_BOUNDARY_SENTENCE_START,  0,  5, "abc! " },
-    {  0,  2, ATK_TEXT_BOUNDARY_SENTENCE_START,  0,  5, "abc! " },
-    {  0,  3, ATK_TEXT_BOUNDARY_SENTENCE_START,  0,  5, "abc! " },
-    {  0,  4, ATK_TEXT_BOUNDARY_SENTENCE_START,  0,  5, "abc! " },
-    {  0,  5, ATK_TEXT_BOUNDARY_SENTENCE_START,  5,  9, "def\n" },
-    {  0,  6, ATK_TEXT_BOUNDARY_SENTENCE_START,  5,  9, "def\n" },
-    {  0,  7, ATK_TEXT_BOUNDARY_SENTENCE_START,  5,  9, "def\n" },
-    {  0,  8, ATK_TEXT_BOUNDARY_SENTENCE_START,  5,  9, "def\n" },
-    {  0,  9, ATK_TEXT_BOUNDARY_SENTENCE_START,  9, 17, "ghi jkl\n" },
-    {  0, 10, ATK_TEXT_BOUNDARY_SENTENCE_START,  9, 17, "ghi jkl\n" },
-    {  0, 11, ATK_TEXT_BOUNDARY_SENTENCE_START,  9, 17, "ghi jkl\n" },
-    {  0, 12, ATK_TEXT_BOUNDARY_SENTENCE_START,  9, 17, "ghi jkl\n" },
-    {  0, 13, ATK_TEXT_BOUNDARY_SENTENCE_START,  9, 17, "ghi jkl\n" },
-    {  0, 14, ATK_TEXT_BOUNDARY_SENTENCE_START,  9, 17, "ghi jkl\n" },
-    {  0, 15, ATK_TEXT_BOUNDARY_SENTENCE_START,  9, 17, "ghi jkl\n" },
-    {  0, 16, ATK_TEXT_BOUNDARY_SENTENCE_START,  9, 17, "ghi jkl\n" },
-    {  0, 17, ATK_TEXT_BOUNDARY_SENTENCE_START, 17, 20, "mno" },
-    {  0, 18, ATK_TEXT_BOUNDARY_SENTENCE_START, 17, 20, "mno" },
-    {  0, 19, ATK_TEXT_BOUNDARY_SENTENCE_START, 17, 20, "mno" },
-    {  0, 20, ATK_TEXT_BOUNDARY_SENTENCE_START, 17, 20, "mno" },
-    {  0,  0, ATK_TEXT_BOUNDARY_SENTENCE_END,    0,  4, "abc!" },
-    {  0,  1, ATK_TEXT_BOUNDARY_SENTENCE_END,    0,  4, "abc!" },
-    {  0,  2, ATK_TEXT_BOUNDARY_SENTENCE_END,    0,  4, "abc!" },
-    {  0,  3, ATK_TEXT_BOUNDARY_SENTENCE_END,    0,  4, "abc!" },
-    {  0,  4, ATK_TEXT_BOUNDARY_SENTENCE_END,    4,  8, " def" },
-    {  0,  5, ATK_TEXT_BOUNDARY_SENTENCE_END,    4,  8, " def" },
-    {  0,  6, ATK_TEXT_BOUNDARY_SENTENCE_END,    4,  8, " def" },
-    {  0,  7, ATK_TEXT_BOUNDARY_SENTENCE_END,    4,  8, " def" },
-    {  0,  8, ATK_TEXT_BOUNDARY_SENTENCE_END,    8, 16, "\nghi jkl" },
-    {  0,  9, ATK_TEXT_BOUNDARY_SENTENCE_END,    8, 16, "\nghi jkl" },
-    {  0, 10, ATK_TEXT_BOUNDARY_SENTENCE_END,    8, 16, "\nghi jkl" },
-    {  0, 11, ATK_TEXT_BOUNDARY_SENTENCE_END,    8, 16, "\nghi jkl" },
-    {  0, 12, ATK_TEXT_BOUNDARY_SENTENCE_END,    8, 16, "\nghi jkl" },
-    {  0, 13, ATK_TEXT_BOUNDARY_SENTENCE_END,    8, 16, "\nghi jkl" },
-    {  0, 14, ATK_TEXT_BOUNDARY_SENTENCE_END,    8, 16, "\nghi jkl" },
-    {  0, 15, ATK_TEXT_BOUNDARY_SENTENCE_END,    8, 16, "\nghi jkl" },
-    {  0, 16, ATK_TEXT_BOUNDARY_SENTENCE_END,   16, 20, "\nmno" },
-    {  0, 17, ATK_TEXT_BOUNDARY_SENTENCE_END,   16, 20, "\nmno" },
-    {  0, 18, ATK_TEXT_BOUNDARY_SENTENCE_END,   16, 20, "\nmno" },
-    {  0, 19, ATK_TEXT_BOUNDARY_SENTENCE_END,   16, 20, "\nmno" },
-    {  0, 20, ATK_TEXT_BOUNDARY_SENTENCE_END,   20, 20, "" },
-    {  0,  0, ATK_TEXT_BOUNDARY_LINE_START,      0,  9, "abc! def\n" },
-    {  0,  1, ATK_TEXT_BOUNDARY_LINE_START,      0,  9, "abc! def\n" },
-    {  0,  2, ATK_TEXT_BOUNDARY_LINE_START,      0,  9, "abc! def\n" },
-    {  0,  3, ATK_TEXT_BOUNDARY_LINE_START,      0,  9, "abc! def\n" },
-    {  0,  4, ATK_TEXT_BOUNDARY_LINE_START,      0,  9, "abc! def\n" },
-    {  0,  5, ATK_TEXT_BOUNDARY_LINE_START,      0,  9, "abc! def\n" },
-    {  0,  6, ATK_TEXT_BOUNDARY_LINE_START,      0,  9, "abc! def\n" },
-    {  0,  7, ATK_TEXT_BOUNDARY_LINE_START,      0,  9, "abc! def\n" },
-    {  0,  8, ATK_TEXT_BOUNDARY_LINE_START,      0,  9, "abc! def\n" },
-    {  0,  9, ATK_TEXT_BOUNDARY_LINE_START,      9, 17, "ghi jkl\n" },
-    {  0, 10, ATK_TEXT_BOUNDARY_LINE_START,      9, 17, "ghi jkl\n" },
-    {  0, 11, ATK_TEXT_BOUNDARY_LINE_START,      9, 17, "ghi jkl\n" },
-    {  0, 12, ATK_TEXT_BOUNDARY_LINE_START,      9, 17, "ghi jkl\n" },
-    {  0, 13, ATK_TEXT_BOUNDARY_LINE_START,      9, 17, "ghi jkl\n" },
-    {  0, 14, ATK_TEXT_BOUNDARY_LINE_START,      9, 17, "ghi jkl\n" },
-    {  0, 15, ATK_TEXT_BOUNDARY_LINE_START,      9, 17, "ghi jkl\n" },
-    {  0, 16, ATK_TEXT_BOUNDARY_LINE_START,      9, 17, "ghi jkl\n" },
-    {  0, 17, ATK_TEXT_BOUNDARY_LINE_START,     17, 20, "mno" },
-    {  0, 18, ATK_TEXT_BOUNDARY_LINE_START,     17, 20, "mno" },
-    {  0, 19, ATK_TEXT_BOUNDARY_LINE_START,     17, 20, "mno" },
-    {  0, 20, ATK_TEXT_BOUNDARY_LINE_START,     17, 20, "mno" },
-    {  0,  0, ATK_TEXT_BOUNDARY_LINE_END,        0,  8, "abc! def" },
-    {  0,  1, ATK_TEXT_BOUNDARY_LINE_END,        0,  8, "abc! def" },
-    {  0,  2, ATK_TEXT_BOUNDARY_LINE_END,        0,  8, "abc! def" },
-    {  0,  3, ATK_TEXT_BOUNDARY_LINE_END,        0,  8, "abc! def" },
-    {  0,  4, ATK_TEXT_BOUNDARY_LINE_END,        0,  8, "abc! def" },
-    {  0,  5, ATK_TEXT_BOUNDARY_LINE_END,        0,  8, "abc! def" },
-    {  0,  6, ATK_TEXT_BOUNDARY_LINE_END,        0,  8, "abc! def" },
-    {  0,  7, ATK_TEXT_BOUNDARY_LINE_END,        0,  8, "abc! def" },
-    {  0,  8, ATK_TEXT_BOUNDARY_LINE_END,        0,  8, "abc! def" },
-    {  0,  9, ATK_TEXT_BOUNDARY_LINE_END,        8, 16, "\nghi jkl" },
-    {  0, 10, ATK_TEXT_BOUNDARY_LINE_END,        8, 16, "\nghi jkl" },
-    {  0, 11, ATK_TEXT_BOUNDARY_LINE_END,        8, 16, "\nghi jkl" },
-    {  0, 12, ATK_TEXT_BOUNDARY_LINE_END,        8, 16, "\nghi jkl" },
-    {  0, 13, ATK_TEXT_BOUNDARY_LINE_END,        8, 16, "\nghi jkl" },
-    {  0, 14, ATK_TEXT_BOUNDARY_LINE_END,        8, 16, "\nghi jkl" },
-    {  0, 15, ATK_TEXT_BOUNDARY_LINE_END,        8, 16, "\nghi jkl" },
-    {  0, 16, ATK_TEXT_BOUNDARY_LINE_END,        8, 16, "\nghi jkl" },
-    {  0, 17, ATK_TEXT_BOUNDARY_LINE_END,       16, 20, "\nmno" },
-    {  0, 18, ATK_TEXT_BOUNDARY_LINE_END,       16, 20, "\nmno" },
-    {  0, 19, ATK_TEXT_BOUNDARY_LINE_END,       16, 20, "\nmno" },
-    {  0, 20, ATK_TEXT_BOUNDARY_LINE_END,       16, 20, "\nmno" },
-    {  1,  0, ATK_TEXT_BOUNDARY_CHAR,            1,  2, "b" },
-    {  1,  1, ATK_TEXT_BOUNDARY_CHAR,            2,  3, "c" },
-    {  1,  2, ATK_TEXT_BOUNDARY_CHAR,            3,  4, "!" },
-    {  1,  3, ATK_TEXT_BOUNDARY_CHAR,            4,  5, " " },
-    {  1,  4, ATK_TEXT_BOUNDARY_CHAR,            5,  6, "d" },
-    {  1,  5, ATK_TEXT_BOUNDARY_CHAR,            6,  7, "e" },
-    {  1,  6, ATK_TEXT_BOUNDARY_CHAR,            7,  8, "f" },
-    {  1,  7, ATK_TEXT_BOUNDARY_CHAR,            8,  9, "\n" },
-    {  1,  8, ATK_TEXT_BOUNDARY_CHAR,            9, 10, "g" },
-    {  1,  9, ATK_TEXT_BOUNDARY_CHAR,           10, 11, "h" },
-    {  1, 10, ATK_TEXT_BOUNDARY_CHAR,           11, 12, "i" },
-    {  1, 11, ATK_TEXT_BOUNDARY_CHAR,           12, 13, " " },
-    {  1, 12, ATK_TEXT_BOUNDARY_CHAR,           13, 14, "j" },
-    {  1, 13, ATK_TEXT_BOUNDARY_CHAR,           14, 15, "k" },
-    {  1, 14, ATK_TEXT_BOUNDARY_CHAR,           15, 16, "l" },
-    {  1, 15, ATK_TEXT_BOUNDARY_CHAR,           16, 17, "\n" },
-    {  1, 16, ATK_TEXT_BOUNDARY_CHAR,           17, 18, "m" },
-    {  1, 17, ATK_TEXT_BOUNDARY_CHAR,           18, 19, "n" },
-    {  1, 18, ATK_TEXT_BOUNDARY_CHAR,           19, 20, "o" },
-    {  1, 19, ATK_TEXT_BOUNDARY_CHAR,           20, 20, "" },
-    {  1, 20, ATK_TEXT_BOUNDARY_CHAR,           20, 20, "" },
-    {  1,  0, ATK_TEXT_BOUNDARY_WORD_START,      5,  9, "def\n" },
-    {  1,  1, ATK_TEXT_BOUNDARY_WORD_START,      5,  9, "def\n" },
-    {  1,  2, ATK_TEXT_BOUNDARY_WORD_START,      5,  9, "def\n" },
-    {  1,  3, ATK_TEXT_BOUNDARY_WORD_START,      5,  9, "def\n" },
-    {  1,  4, ATK_TEXT_BOUNDARY_WORD_START,      5,  9, "def\n" },
-    {  1,  5, ATK_TEXT_BOUNDARY_WORD_START,      9, 13, "ghi " },
-    {  1,  6, ATK_TEXT_BOUNDARY_WORD_START,      9, 13, "ghi " },
-    {  1,  7, ATK_TEXT_BOUNDARY_WORD_START,      9, 13, "ghi " },
-    {  1,  8, ATK_TEXT_BOUNDARY_WORD_START,      9, 13, "ghi " },
-    {  1,  9, ATK_TEXT_BOUNDARY_WORD_START,     13, 17, "jkl\n" },
-    {  1, 10, ATK_TEXT_BOUNDARY_WORD_START,     13, 17, "jkl\n" },
-    {  1, 11, ATK_TEXT_BOUNDARY_WORD_START,     13, 17, "jkl\n" },
-    {  1, 12, ATK_TEXT_BOUNDARY_WORD_START,     13, 17, "jkl\n" },
-    {  1, 13, ATK_TEXT_BOUNDARY_WORD_START,     17, 20, "mno" },
-    {  1, 14, ATK_TEXT_BOUNDARY_WORD_START,     17, 20, "mno" },
-    {  1, 15, ATK_TEXT_BOUNDARY_WORD_START,     17, 20, "mno" },
-    {  1, 16, ATK_TEXT_BOUNDARY_WORD_START,     17, 20, "mno" },
-    {  1, 17, ATK_TEXT_BOUNDARY_WORD_START,     20, 20, "" },
-    {  1, 18, ATK_TEXT_BOUNDARY_WORD_START,     20, 20, "" },
-    {  1, 19, ATK_TEXT_BOUNDARY_WORD_START,     20, 20, "" },
-    {  1, 20, ATK_TEXT_BOUNDARY_WORD_START,     20, 20, "" },
-    {  1,  0, ATK_TEXT_BOUNDARY_WORD_END,        3,  8, "! def" },
-    {  1,  1, ATK_TEXT_BOUNDARY_WORD_END,        3,  8, "! def" },
-    {  1,  2, ATK_TEXT_BOUNDARY_WORD_END,        3,  8, "! def" },
-    {  1,  3, ATK_TEXT_BOUNDARY_WORD_END,        8, 12, "\nghi" },
-    {  1,  4, ATK_TEXT_BOUNDARY_WORD_END,        8, 12, "\nghi" },
-    {  1,  5, ATK_TEXT_BOUNDARY_WORD_END,        8, 12, "\nghi" },
-    {  1,  6, ATK_TEXT_BOUNDARY_WORD_END,        8, 12, "\nghi" },
-    {  1,  7, ATK_TEXT_BOUNDARY_WORD_END,        8, 12, "\nghi" },
-    {  1,  8, ATK_TEXT_BOUNDARY_WORD_END,       12, 16, " jkl" },
-    {  1,  9, ATK_TEXT_BOUNDARY_WORD_END,       12, 16, " jkl" },
-    {  1, 10, ATK_TEXT_BOUNDARY_WORD_END,       12, 16, " jkl" },
-    {  1, 11, ATK_TEXT_BOUNDARY_WORD_END,       12, 16, " jkl" },
-    {  1, 12, ATK_TEXT_BOUNDARY_WORD_END,       16, 20, "\nmno" },
-    {  1, 13, ATK_TEXT_BOUNDARY_WORD_END,       16, 20, "\nmno" },
-    {  1, 14, ATK_TEXT_BOUNDARY_WORD_END,       16, 20, "\nmno" },
-    {  1, 15, ATK_TEXT_BOUNDARY_WORD_END,       16, 20, "\nmno" },
-    {  1, 16, ATK_TEXT_BOUNDARY_WORD_END,       20, 20, "" },
-    {  1, 17, ATK_TEXT_BOUNDARY_WORD_END,       20, 20, "" },
-    {  1, 18, ATK_TEXT_BOUNDARY_WORD_END,       20, 20, "" },
-    {  1, 19, ATK_TEXT_BOUNDARY_WORD_END,       20, 20, "" },
-    {  1, 20, ATK_TEXT_BOUNDARY_WORD_END,       20, 20, "" },
-    {  1,  0, ATK_TEXT_BOUNDARY_SENTENCE_START,  5,  9, "def\n" },
-    {  1,  1, ATK_TEXT_BOUNDARY_SENTENCE_START,  5,  9, "def\n" },
-    {  1,  2, ATK_TEXT_BOUNDARY_SENTENCE_START,  5,  9, "def\n" },
-    {  1,  3, ATK_TEXT_BOUNDARY_SENTENCE_START,  5,  9, "def\n" },
-    {  1,  4, ATK_TEXT_BOUNDARY_SENTENCE_START,  5,  9, "def\n" },
-    {  1,  5, ATK_TEXT_BOUNDARY_SENTENCE_START,  9, 17, "ghi jkl\n" },
-    {  1,  6, ATK_TEXT_BOUNDARY_SENTENCE_START,  9, 17, "ghi jkl\n" },
-    {  1,  7, ATK_TEXT_BOUNDARY_SENTENCE_START,  9, 17, "ghi jkl\n" },
-    {  1,  8, ATK_TEXT_BOUNDARY_SENTENCE_START,  9, 17, "ghi jkl\n" },
-    {  1,  9, ATK_TEXT_BOUNDARY_SENTENCE_START, 17, 20, "mno" },
-    {  1, 10, ATK_TEXT_BOUNDARY_SENTENCE_START, 17, 20, "mno" },
-    {  1, 11, ATK_TEXT_BOUNDARY_SENTENCE_START, 17, 20, "mno" },
-    {  1, 12, ATK_TEXT_BOUNDARY_SENTENCE_START, 17, 20, "mno" },
-    {  1, 13, ATK_TEXT_BOUNDARY_SENTENCE_START, 17, 20, "mno" },
-    {  1, 14, ATK_TEXT_BOUNDARY_SENTENCE_START, 17, 20, "mno" },
-    {  1, 15, ATK_TEXT_BOUNDARY_SENTENCE_START, 17, 20, "mno" },
-    {  1, 16, ATK_TEXT_BOUNDARY_SENTENCE_START, 17, 20, "mno" },
-    {  1, 17, ATK_TEXT_BOUNDARY_SENTENCE_START, 20, 20, "" },
-    {  1, 18, ATK_TEXT_BOUNDARY_SENTENCE_START, 20, 20, "" },
-    {  1, 19, ATK_TEXT_BOUNDARY_SENTENCE_START, 20, 20, "" },
-    {  1, 20, ATK_TEXT_BOUNDARY_SENTENCE_START, 20, 20, "" },
-    {  1,  0, ATK_TEXT_BOUNDARY_SENTENCE_END,    4,  8, " def" },
-    {  1,  1, ATK_TEXT_BOUNDARY_SENTENCE_END,    4,  8, " def" },
-    {  1,  2, ATK_TEXT_BOUNDARY_SENTENCE_END,    4,  8, " def" },
-    {  1,  3, ATK_TEXT_BOUNDARY_SENTENCE_END,    4,  8, " def" },
-    {  1,  4, ATK_TEXT_BOUNDARY_SENTENCE_END,    8, 16, "\nghi jkl" },
-    {  1,  5, ATK_TEXT_BOUNDARY_SENTENCE_END,    8, 16, "\nghi jkl" },
-    {  1,  6, ATK_TEXT_BOUNDARY_SENTENCE_END,    8, 16, "\nghi jkl" },
-    {  1,  7, ATK_TEXT_BOUNDARY_SENTENCE_END,    8, 16, "\nghi jkl" },
-    {  1,  8, ATK_TEXT_BOUNDARY_SENTENCE_END,   16, 20, "\nmno" },
-    {  1,  9, ATK_TEXT_BOUNDARY_SENTENCE_END,   16, 20, "\nmno" },
-    {  1, 10, ATK_TEXT_BOUNDARY_SENTENCE_END,   16, 20, "\nmno" },
-    {  1, 11, ATK_TEXT_BOUNDARY_SENTENCE_END,   16, 20, "\nmno" },
-    {  1, 12, ATK_TEXT_BOUNDARY_SENTENCE_END,   16, 20, "\nmno" },
-    {  1, 13, ATK_TEXT_BOUNDARY_SENTENCE_END,   16, 20, "\nmno" },
-    {  1, 14, ATK_TEXT_BOUNDARY_SENTENCE_END,   16, 20, "\nmno" },
-    {  1, 15, ATK_TEXT_BOUNDARY_SENTENCE_END,   16, 20, "\nmno" },
-    {  1, 16, ATK_TEXT_BOUNDARY_SENTENCE_END,   20, 20, "" },
-    {  1, 17, ATK_TEXT_BOUNDARY_SENTENCE_END,   20, 20, "" },
-    {  1, 18, ATK_TEXT_BOUNDARY_SENTENCE_END,   20, 20, "" },
-    {  1, 19, ATK_TEXT_BOUNDARY_SENTENCE_END,   20, 20, "" },
-    {  1, 20, ATK_TEXT_BOUNDARY_SENTENCE_END,   20, 20, "" },
-    {  1,  0, ATK_TEXT_BOUNDARY_LINE_START,      9, 17, "ghi jkl\n" },
-    {  1,  1, ATK_TEXT_BOUNDARY_LINE_START,      9, 17, "ghi jkl\n" },
-    {  1,  2, ATK_TEXT_BOUNDARY_LINE_START,      9, 17, "ghi jkl\n" },
-    {  1,  3, ATK_TEXT_BOUNDARY_LINE_START,      9, 17, "ghi jkl\n" },
-    {  1,  4, ATK_TEXT_BOUNDARY_LINE_START,      9, 17, "ghi jkl\n" },
-    {  1,  5, ATK_TEXT_BOUNDARY_LINE_START,      9, 17, "ghi jkl\n" },
-    {  1,  6, ATK_TEXT_BOUNDARY_LINE_START,      9, 17, "ghi jkl\n" },
-    {  1,  7, ATK_TEXT_BOUNDARY_LINE_START,      9, 17, "ghi jkl\n" },
-    {  1,  8, ATK_TEXT_BOUNDARY_LINE_START,      9, 17, "ghi jkl\n" },
-    {  1,  9, ATK_TEXT_BOUNDARY_LINE_START,     17, 20, "mno" },
-    {  1, 10, ATK_TEXT_BOUNDARY_LINE_START,     17, 20, "mno" },
-    {  1, 11, ATK_TEXT_BOUNDARY_LINE_START,     17, 20, "mno" },
-    {  1, 12, ATK_TEXT_BOUNDARY_LINE_START,     17, 20, "mno" },
-    {  1, 13, ATK_TEXT_BOUNDARY_LINE_START,     17, 20, "mno" },
-    {  1, 14, ATK_TEXT_BOUNDARY_LINE_START,     17, 20, "mno" },
-    {  1, 15, ATK_TEXT_BOUNDARY_LINE_START,     17, 20, "mno" },
-    {  1, 16, ATK_TEXT_BOUNDARY_LINE_START,     17, 20, "mno" },
-    {  1, 17, ATK_TEXT_BOUNDARY_LINE_START,     20, 20, "" },
-    {  1, 18, ATK_TEXT_BOUNDARY_LINE_START,     20, 20, "" },
-    {  1, 19, ATK_TEXT_BOUNDARY_LINE_START,     20, 20, "" },
-    {  1, 20, ATK_TEXT_BOUNDARY_LINE_START,     20, 20, "" },
-    {  1,  0, ATK_TEXT_BOUNDARY_LINE_END,        8, 16, "\nghi jkl" },
-    {  1,  1, ATK_TEXT_BOUNDARY_LINE_END,        8, 16, "\nghi jkl" },
-    {  1,  2, ATK_TEXT_BOUNDARY_LINE_END,        8, 16, "\nghi jkl" },
-    {  1,  3, ATK_TEXT_BOUNDARY_LINE_END,        8, 16, "\nghi jkl" },
-    {  1,  4, ATK_TEXT_BOUNDARY_LINE_END,        8, 16, "\nghi jkl" },
-    {  1,  5, ATK_TEXT_BOUNDARY_LINE_END,        8, 16, "\nghi jkl" },
-    {  1,  6, ATK_TEXT_BOUNDARY_LINE_END,        8, 16, "\nghi jkl" },
-    {  1,  7, ATK_TEXT_BOUNDARY_LINE_END,        8, 16, "\nghi jkl" },
-    {  1,  8, ATK_TEXT_BOUNDARY_LINE_END,        8, 16, "\nghi jkl" },
-    {  1,  9, ATK_TEXT_BOUNDARY_LINE_END,       16, 20, "\nmno" },
-    {  1, 10, ATK_TEXT_BOUNDARY_LINE_END,       16, 20, "\nmno" },
-    {  1, 11, ATK_TEXT_BOUNDARY_LINE_END,       16, 20, "\nmno" },
-    {  1, 12, ATK_TEXT_BOUNDARY_LINE_END,       16, 20, "\nmno" },
-    {  1, 13, ATK_TEXT_BOUNDARY_LINE_END,       16, 20, "\nmno" },
-    {  1, 14, ATK_TEXT_BOUNDARY_LINE_END,       16, 20, "\nmno" },
-    {  1, 15, ATK_TEXT_BOUNDARY_LINE_END,       16, 20, "\nmno" },
-    {  1, 16, ATK_TEXT_BOUNDARY_LINE_END,       16, 20, "\nmno" },
-    {  1, 17, ATK_TEXT_BOUNDARY_LINE_END,       20, 20, "" },
-    {  1, 18, ATK_TEXT_BOUNDARY_LINE_END,       20, 20, "" },
-    {  1, 19, ATK_TEXT_BOUNDARY_LINE_END,       20, 20, "" },
-    {  1, 20, ATK_TEXT_BOUNDARY_LINE_END,       20, 20, "" },
-    {  0, -1, }
-  };
-  gint start, end;
-  gchar *word;
-  gint i;
-
-  atk_text = ATK_TEXT (gtk_widget_get_accessible (widget));
-
-  set_text (widget, text);
-#ifdef SHOW_TEXT_ATTRIBUTES
-  if (GTK_IS_LABEL (widget))
-    show_text_attributes (gtk_label_get_layout (GTK_LABEL (widget)));
-  else if (GTK_IS_ENTRY (widget))
-    show_text_attributes (gtk_entry_get_layout (GTK_ENTRY (widget)));
-#endif
-
-#ifdef DUMP_RESULTS
-  for (i = -1; i <= 1; i++)
-    {
-      gint j, k;
-      for (j = ATK_TEXT_BOUNDARY_CHAR; j <= ATK_TEXT_BOUNDARY_LINE_END; j++)
-        for (k = 0; k <= strlen (text); k++)
-          {
-            switch (i)
-              {
-              case -1:
-                word = atk_text_get_text_before_offset (atk_text, k, j, &start, &end);
-                break;
-              case 0:
-                word = atk_text_get_text_at_offset (atk_text, k, j, &start, &end);
-                break;
-              case 1:
-                word = atk_text_get_text_after_offset (atk_text, k, j, &start, &end);
-                break;
-              default:
-                g_assert_not_reached ();
-                break;
-              }
-            printf ("    { %2d, %2d, %s %2d, %2d, \"%s\" },\n", i, k, boundary(j), start, end, escape (word));
-            g_free (word);
-          }
-    }
-#endif
-
-  for (i = 0; expected[i].offset != -1; i++)
-    {
-      if (GTK_IS_ENTRY (widget))
-        {
-          /* GtkEntry sets single-paragraph mode on its pango layout */
-          if (expected[i].boundary == ATK_TEXT_BOUNDARY_LINE_START ||
-              expected[i].boundary == ATK_TEXT_BOUNDARY_LINE_END)
-            continue;
-        }
-
-      switch (expected[i].gravity)
-        {
-          case -1:
-            word = atk_text_get_text_before_offset (atk_text,
-                                                    expected[i].offset,
-                                                    expected[i].boundary,
-                                                    &start, &end);
-            break;
-          case 0:
-            word = atk_text_get_text_at_offset (atk_text,
-                                                expected[i].offset,
-                                                expected[i].boundary,
-                                                &start, &end);
-            break;
-          case 1:
-            word = atk_text_get_text_after_offset (atk_text,
-                                                   expected[i].offset,
-                                                   expected[i].boundary,
-                                                   &start, &end);
-            break;
-          default:
-            g_assert_not_reached ();
-            break;
-        }
-
-      g_assert_cmpstr (word, ==, expected[i].word);
-      g_assert_cmpint (start, ==, expected[i].start);
-      g_assert_cmpint (end, ==, expected[i].end);
-      g_free (word);
-    }
-}
-
-static void
-select_region (GtkWidget *widget,
-               gint       start,
-               gint       end)
-{
-  if (GTK_IS_EDITABLE (widget))
-    gtk_editable_select_region (GTK_EDITABLE (widget), start, end);
-  else if (GTK_IS_LABEL (widget))
-    gtk_label_select_region (GTK_LABEL (widget), start, end);
-  else if (GTK_IS_TEXT_VIEW (widget))
-    {
-      GtkTextBuffer *buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (widget));
-      GtkTextIter start_iter, end_iter;
-
-      gtk_text_buffer_get_iter_at_offset (buffer, &start_iter, end);
-      gtk_text_buffer_get_iter_at_offset (buffer, &end_iter, start);
-
-      gtk_text_buffer_select_range (buffer, &start_iter, &end_iter);
-    }
-  else
-    g_assert_not_reached ();
-}
-
-typedef struct {
-  gint count;
-  gint position;
-  gint bound;
-} SelectionData;
-
-static void
-caret_moved_cb (AtkText *text, gint position, SelectionData *data)
-{
-  data->count++;
-  data->position = position;
-}
-
-static void
-selection_changed_cb (AtkText *text, SelectionData *data)
-{
-  data->count++;
-
-  atk_text_get_selection (text, 0, &data->bound, &data->position);
-}
-
-static void
-test_selection (GtkWidget *widget)
-{
-  AtkText *atk_text;
-  const gchar *text = "Bla bla bla";
-  gint n;
-  gchar *ret;
-  gint start, end;
-  SelectionData data1;
-  SelectionData data2;
-
-  if (GTK_IS_LABEL (widget))
-    gtk_label_set_selectable (GTK_LABEL (widget), TRUE);
-
-  atk_text = ATK_TEXT (gtk_widget_get_accessible (widget));
-
-  data1.count = 0;
-  data2.count = 0;
-  g_signal_connect (atk_text, "text_caret_moved",
-                    G_CALLBACK (caret_moved_cb), &data1);
-  g_signal_connect (atk_text, "text_selection_changed",
-                    G_CALLBACK (selection_changed_cb), &data2);
-
-  set_text (widget, text);
-
-  n = atk_text_get_n_selections (atk_text);
-  g_assert_cmpint (n, ==, 0);
-
-  if (data1.count == 1)
-    /* insertion before cursor */
-    g_assert_cmpint (data1.position, ==, 11);
-  else
-    /* insertion after cursor */
-    g_assert_cmpint (data1.count, ==, 0);
-  g_assert_cmpint (data2.count, ==, 0);
-
-  select_region (widget, 4, 7);
-
-  g_assert_cmpint (data1.count, >=, 1);
-  g_assert_cmpint (data1.position, ==, 7);
-  g_assert_cmpint (data2.count, >=, 1);
-  g_assert_cmpint (data2.bound, ==, 4);
-  g_assert_cmpint (data2.position, ==, 7);
-
-  n = atk_text_get_n_selections (atk_text);
-  g_assert_cmpint (n, ==, 1);
-
-  ret = atk_text_get_selection (atk_text, 0, &start, &end);
-  g_assert_cmpstr (ret, ==, "bla");
-  g_assert_cmpint (start, ==, 4);
-  g_assert_cmpint (end, ==, 7);
-  g_free (ret);
-
-  atk_text_remove_selection (atk_text, 0);
-  n = atk_text_get_n_selections (atk_text);
-  g_assert_cmpint (n, ==, 0);
-
-  g_assert_cmpint (data1.count, >=, 1);
-  g_assert_cmpint (data2.count, >=, 2);
-  g_assert_cmpint (data2.position, ==, 7);
-  g_assert_cmpint (data2.bound, ==, 7);
-}
-
-static void
-setup_test (GtkWidget *widget)
-{
-  set_text (widget, "");
-}
-
-static void
-add_text_test (const gchar      *prefix,
-               GTestFixtureFunc  test_func,
-               GtkWidget        *widget)
-{
-  gchar *path;
-
-  path = g_strdup_printf ("%s/%s", prefix, G_OBJECT_TYPE_NAME (widget));
-  g_test_add_vtable (path,
-                     0,
-                     g_object_ref (widget),
-                     (GTestFixtureFunc) setup_test,
-                     (GTestFixtureFunc) test_func,
-                     (GTestFixtureFunc) g_object_unref);
-  g_free (path);
-}
-
-static void
-add_text_tests (GtkWidget *widget)
-{
-  g_object_ref_sink (widget);
-  add_text_test ("/text/basic", (GTestFixtureFunc) test_basic, widget);
-  add_text_test ("/text/words", (GTestFixtureFunc) test_words, widget);
-  add_text_test ("/text/changed", (GTestFixtureFunc) test_text_changed, widget);
-  add_text_test ("/text/selection", (GTestFixtureFunc) test_selection, widget);
-  g_object_unref (widget);
-}
-
-static void
-test_bold_label (void)
-{
-  GtkWidget *label;
-  AtkObject *atk_obj;
-  gchar *text;
-
-  g_test_bug ("126797");
-
-  label = gtk_label_new ("<b>Bold?</b>");
-  g_object_ref_sink (label);
-
-  atk_obj = gtk_widget_get_accessible (label);
-
-  text = atk_text_get_text (ATK_TEXT (atk_obj), 0, -1);
-  g_assert_cmpstr (text, ==, "<b>Bold?</b>");
-  g_free (text);
-
-  gtk_label_set_use_markup (GTK_LABEL (label), TRUE);
-
-  text = atk_text_get_text (ATK_TEXT (atk_obj), 0, -1);
-  g_assert_cmpstr (text, ==, "Bold?");
-  g_free (text);
-
-  g_object_unref (label);
-}
-
-int
-main (int argc, char *argv[])
-{
-  gtk_test_init (&argc, &argv, NULL);
-
-  g_test_bug_base ("http://bugzilla.gnome.org/");
-
-  g_test_add_func ("/text/bold/GtkLabel", test_bold_label);
-
-  add_text_tests (gtk_label_new (""));
-  add_text_tests (gtk_entry_new ());
-  add_text_tests (gtk_text_view_new ());
-
-  return g_test_run ();
-}
diff --git a/tests/a11y/text.txt b/tests/a11y/text.txt
deleted file mode 100644 (file)
index a90741d..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-window1
-  "window"
-  index: 0
-  state: enabled resizable sensitive showing visible
-  toolkit: gtk
-  <AtkComponent>
-  layer: window
-  alpha: 1
-  text1
-    "text"
-    parent: window1
-    index: 0
-    state: editable enabled focusable multi-line sensitive showing visible
-    toolkit: gtk
-    <AtkComponent>
-    layer: widget
-    alpha: 1
-    <AtkText>
-    text: Twas brillig, and the slithy toves
-Did gyre and gimple in the wabe
-    character count: 66
-    caret offset: 66
-    default attributes: bg-color: <omitted>
-                        bg-full-height: false
-                        direction: <omitted>
-                        editable: true
-                        family-name: <omitted>
-                        fg-color: <omitted>
-                        indent: 0
-                        invisible: false
-                        justification: left
-                        language: <omitted>
-                        left-margin: 0
-                        pixels-above-lines: 0
-                        pixels-below-lines: 0
-                        pixels-inside-wrap: 0
-                        right-margin: 0
-                        rise: 0
-                        scale: 1
-                        size: <omitted>
-                        stretch: <omitted>
-                        strikethrough: false
-                        style: <omitted>
-                        underline: none
-                        variant: <omitted>
-                        weight: <omitted>
-                        wrap-mode: none
-    <AtkStreamableContent>
-    mime types: application/x-gtk-text-buffer-rich-text text/plain
diff --git a/tests/a11y/text.ui b/tests/a11y/text.ui
deleted file mode 100644 (file)
index 508efd5..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<interface>
-  <!-- interface-requires gtk+ 3.0 -->
-  <object class="GtkTextBuffer" id="buffer1">
-    <property name="text">Twas brillig, and the slithy toves
-Did gyre and gimple in the wabe</property>
-  </object>
-  <object class="GtkWindow" id="window1">
-    <property name="can_focus">False</property>
-    <property name="type">popup</property>
-    <child>
-      <object class="GtkTextView" id="text1">
-        <property name="visible">True</property>
-        <property name="can_focus">True</property>
-        <property name="buffer">buffer1</property>
-      </object>
-    </child>
-  </object>
-</interface>
diff --git a/tests/a11y/tree-performance.c b/tests/a11y/tree-performance.c
deleted file mode 100644 (file)
index b28f7a3..0000000
+++ /dev/null
@@ -1,369 +0,0 @@
-/*
- * Copyright (C) 2011 Red Hat Inc.
- *
- * Author:
- *      Matthias Clasen <mclasen@redhat.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include <gtk/gtk.h>
-
-#define N_ROWS 10000
-
-const gchar list_ui[] =
-  "<interface>"
-  "  <object class='GtkListStore' id='liststore1'>"
-  "    <columns>"
-  "      <column type='gchararray'/>"
-  "      <column type='gchararray'/>"
-  "      <column type='gchararray'/>"
-  "      <column type='gboolean'/>"
-  "      <column type='gint'/>"
-  "      <column type='gint'/>"
-  "    </columns>"
-  "    <data>"
-  "      <row><col id='0'>One</col><col id='1'>Two</col><col id='2'>Three</col><col id='3'>True</col><col id='4'>50</col><col id='5'>50</col></row>"
-  "    </data>"
-  "  </object>"
-  "  <object class='GtkWindow' id='window1'>"
-  "    <child>"
-  "      <object class='GtkTreeView' id='treeview1'>"
-  "        <property name='visible'>True</property>"
-  "        <property name='model'>liststore1</property>"
-  "        <child>"
-  "          <object class='GtkTreeViewColumn' id='column1'>"
-  "            <property name='title' translatable='yes'>First column</property>"
-  "            <child>"
-  "              <object class='GtkCellRendererText' id='renderer1'>"
-  "              </object>"
-  "              <attributes>"
-  "                <attribute name='text'>0</attribute>"
-  "              </attributes>"
-  "            </child>"
-  "            <child>"
-  "              <object class='GtkCellRendererToggle' id='renderer2'>"
-  "              </object>"
-  "              <attributes>"
-  "                <attribute name='active'>3</attribute>"
-  "              </attributes>"
-  "            </child>"
-  "          </object>"
-  "        </child>"
-  "        <child>"
-  "          <object class='GtkTreeViewColumn' id='column2'>"
-  "            <property name='title' translatable='yes'>Second column</property>"
-  "            <child>"
-  "              <object class='GtkCellRendererText' id='renderer3'>"
-  "              </object>"
-  "              <attributes>"
-  "                <attribute name='text'>1</attribute>"
-  "              </attributes>"
-  "            </child>"
-  "            <child>"
-  "              <object class='GtkCellRendererProgress' id='renderer4'>"
-  "              </object>"
-  "              <attributes>"
-  "                <attribute name='value'>4</attribute>"
-  "              </attributes>"
-  "            </child>"
-  "          </object>"
-  "        </child>"
-  "      </object>"
-  "    </child>"
-  "  </object>"
-  "</interface>";
-
-static void
-walk_accessible_tree (AtkObject *accessible,
-                      gpointer   data)
-{
-  gint *count = data;
-  gint i;
-
-  (*count)++;
-
-  for (i = 0; i < atk_object_get_n_accessible_children (accessible); i++)
-    {
-      AtkObject *child = atk_object_ref_accessible_child (accessible, i);
-      walk_accessible_tree (child, data);
-      g_object_unref (child);
-    }
-}
-
-static GtkWidget *
-builder_get_toplevel (GtkBuilder *builder)
-{
-  GSList *list, *walk;
-  GtkWidget *window = NULL;
-
-  list = gtk_builder_get_objects (builder);
-  for (walk = list; walk; walk = walk->next)
-    {
-      if (GTK_IS_WINDOW (walk->data) &&
-          gtk_widget_get_parent (walk->data) == NULL)
-        {
-          window = walk->data;
-          break;
-        }
-    }
-
-  g_slist_free (list);
-
-  return window;
-}
-
-static void
-populate_list (GtkBuilder *builder)
-{
-  GtkTreeView *tv;
-  GtkListStore *store;
-  GtkTreeIter iter;
-  gint i;
-
-  tv = (GtkTreeView *)gtk_builder_get_object (builder, "treeview1");
-  store = (GtkListStore *)gtk_tree_view_get_model (tv);
-
-  /* append a many rows */
-  for (i = 0; i < N_ROWS; i++)
-    {
-      gtk_list_store_append (store, &iter);
-      gtk_list_store_set (store, &iter, 0, "Bla", 1, "Bla bla", 2, "Bla bla bla", 3, i % 2 == 0 ? TRUE : FALSE, 4, i % 100, 5, i, -1);
-    }
-}
-
-static void
-test_performance_list (void)
-{
-  GtkBuilder *builder;
-  gdouble elapsed;
-  GtkWidget *window;
-  GError *error = NULL;
-
-  builder = gtk_builder_new ();
-  gtk_builder_add_from_string (builder, list_ui, -1, &error);
-  g_assert_no_error (error);
-  window = builder_get_toplevel (builder);
-  g_assert (window);
-
-  gtk_widget_show (window);
-
-  g_test_timer_start ();
-
-  populate_list (builder);
-
-  elapsed = g_test_timer_elapsed ();
-  g_test_minimized_result (elapsed, "large list test: %gsec", elapsed);
-  g_object_unref (builder);
-}
-
-static void
-test_a11y_performance_list (void)
-{
-  GtkBuilder *builder;
-  gdouble elapsed;
-  GtkWidget *window;
-  GError *error = NULL;
-  gint count_before;
-  gint count_after;
-
-  builder = gtk_builder_new ();
-  gtk_builder_add_from_string (builder, list_ui, -1, &error);
-  g_assert_no_error (error);
-  window = builder_get_toplevel (builder);
-  g_assert (window);
-
-  gtk_widget_show (window);
-
-  g_test_timer_start ();
-
-  /* make sure all accessibles exist */
-  count_before = 0;
-  walk_accessible_tree (gtk_widget_get_accessible (window), &count_before);
-
-  populate_list (builder);
-
-  /* for good measure, do this again */
-  count_after = 0;
-  walk_accessible_tree (gtk_widget_get_accessible (window), &count_after);
-
-  elapsed = g_test_timer_elapsed ();
-  g_test_minimized_result (elapsed, "large list with a11y: %gsec", elapsed);
-  g_object_unref (builder);
-
-  g_test_message ("%d accessibles before, %d after\n", count_before, count_after);
-}
-
-const gchar tree_ui[] =
-  "<interface>"
-  "  <object class='GtkTreeStore' id='treestore1'>"
-  "    <columns>"
-  "      <column type='gchararray'/>"
-  "      <column type='gchararray'/>"
-  "      <column type='gchararray'/>"
-  "      <column type='gboolean'/>"
-  "      <column type='gint'/>"
-  "      <column type='gint'/>"
-  "    </columns>"
-  "  </object>"
-  "  <object class='GtkWindow' id='window1'>"
-  "    <child>"
-  "      <object class='GtkTreeView' id='treeview1'>"
-  "        <property name='visible'>True</property>"
-  "        <property name='model'>treestore1</property>"
-  "        <child>"
-  "          <object class='GtkTreeViewColumn' id='column1'>"
-  "            <property name='title' translatable='yes'>First column</property>"
-  "            <child>"
-  "              <object class='GtkCellRendererText' id='renderer1'>"
-  "              </object>"
-  "              <attributes>"
-  "                <attribute name='text'>0</attribute>"
-  "              </attributes>"
-  "            </child>"
-  "            <child>"
-  "              <object class='GtkCellRendererToggle' id='renderer2'>"
-  "              </object>"
-  "              <attributes>"
-  "                <attribute name='active'>3</attribute>"
-  "              </attributes>"
-  "            </child>"
-  "          </object>"
-  "        </child>"
-  "        <child>"
-  "          <object class='GtkTreeViewColumn' id='column2'>"
-  "            <property name='title' translatable='yes'>Second column</property>"
-  "            <child>"
-  "              <object class='GtkCellRendererText' id='renderer3'>"
-  "              </object>"
-  "              <attributes>"
-  "                <attribute name='text'>1</attribute>"
-  "              </attributes>"
-  "            </child>"
-  "            <child>"
-  "              <object class='GtkCellRendererProgress' id='renderer4'>"
-  "              </object>"
-  "              <attributes>"
-  "                <attribute name='value'>4</attribute>"
-  "              </attributes>"
-  "            </child>"
-  "          </object>"
-  "        </child>"
-  "      </object>"
-  "    </child>"
-  "  </object>"
-  "</interface>";
-
-static void
-populate_tree (GtkBuilder *builder)
-{
-  GtkTreeView *tv;
-  GtkTreeStore *store;
-  GtkTreeIter iter;
-  gint i;
-
-  tv = (GtkTreeView *)gtk_builder_get_object (builder, "treeview1");
-  store = (GtkTreeStore *)gtk_tree_view_get_model (tv);
-
-  /* append a thousand rows */
-  for (i = 0; i < N_ROWS / 3; i++)
-    {
-      gtk_tree_store_append (store, &iter, NULL);
-      gtk_tree_store_set (store, &iter, 0, "Bla", 1, "Bla bla", 2, "Bla bla bla", 3, i % 2 == 0 ? TRUE : FALSE, 4, i % 100, 5, i, -1);
-      gtk_tree_store_append (store, &iter, &iter);
-      gtk_tree_store_set (store, &iter, 0, "Bla", 1, "Bla bla", 2, "Bla bla bla", 3, i % 2 == 0 ? TRUE : FALSE, 4, i % 100, 5, i, -1);
-      gtk_tree_store_append (store, &iter, &iter);
-      gtk_tree_store_set (store, &iter, 0, "Bla", 1, "Bla bla", 2, "Bla bla bla", 3, i % 2 == 0 ? TRUE : FALSE, 4, i % 100, 5, i, -1);
-    }
-
-  gtk_tree_view_expand_all (tv);
-}
-
-static void
-test_performance_tree (void)
-{
-  GtkBuilder *builder;
-  gdouble elapsed;
-  GtkWidget *window;
-  GError *error = NULL;
-
-  builder = gtk_builder_new ();
-  gtk_builder_add_from_string (builder, tree_ui, -1, &error);
-  g_assert_no_error (error);
-  window = builder_get_toplevel (builder);
-  g_assert (window);
-
-  gtk_widget_show (window);
-
-  g_test_timer_start ();
-
-  populate_tree (builder);
-
-  elapsed = g_test_timer_elapsed ();
-  g_test_minimized_result (elapsed, "large tree test: %gsec", elapsed);
-  g_object_unref (builder);
-}
-
-static void
-test_a11y_performance_tree (void)
-{
-  GtkBuilder *builder;
-  gdouble elapsed;
-  GtkWidget *window;
-  GError *error = NULL;
-  gint count_before;
-  gint count_after;
-
-  builder = gtk_builder_new ();
-  gtk_builder_add_from_string (builder, tree_ui, -1, &error);
-  g_assert_no_error (error);
-  window = builder_get_toplevel (builder);
-  g_assert (window);
-
-  gtk_widget_show (window);
-
-  g_test_timer_start ();
-
-  /* make sure all accessibles exist */
-  count_before = 0;
-  walk_accessible_tree (gtk_widget_get_accessible (window), &count_before);
-
-  populate_tree (builder);
-
-  /* for good measure, do this again */
-  count_after = 0;
-  walk_accessible_tree (gtk_widget_get_accessible (window), &count_after);
-
-  elapsed = g_test_timer_elapsed ();
-  g_test_minimized_result (elapsed, "large tree with a11y: %gsec", elapsed);
-  g_object_unref (builder);
-
-  g_test_message ("%d accessibles before, %d after\n", count_before, count_after);
-}
-
-int
-main (int argc, char *argv[])
-{
-  gtk_test_init (&argc, &argv, NULL);
-
-  if (!g_test_perf ())
-    return 0;
-
-  g_test_add_func ("/performance/list", test_performance_list);
-  g_test_add_func ("/a11y/performance/list", test_a11y_performance_list);
-  g_test_add_func ("/performance/tree", test_performance_tree);
-  g_test_add_func ("/a11y/performance/tree", test_a11y_performance_tree);
-
-  return g_test_run ();
-}
diff --git a/tests/a11y/tree-relationships.c b/tests/a11y/tree-relationships.c
deleted file mode 100644 (file)
index 34f45b6..0000000
+++ /dev/null
@@ -1,382 +0,0 @@
-/*
- * Copyright (C) 2011 SUSE Linux Products GmbH, Nurenberg, Germany
- *
- * Author:
- *      Mike Gorse <mgorse@suse.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include <gtk/gtk.h>
-
-const gchar list_ui[] =
-  "<interface>"
-  "  <object class='GtkListStore' id='liststore1'>"
-  "    <columns>"
-  "      <column type='gchararray'/>"
-  "      <column type='gchararray'/>"
-  "      <column type='gchararray'/>"
-  "      <column type='gboolean'/>"
-  "      <column type='gint'/>"
-  "      <column type='gint'/>"
-  "    </columns>"
-  "    <data>"
-  "      <row><col id='0'>One</col><col id='1'>Two</col><col id='2'>Three</col><col id='3'>True</col><col id='4'>50</col><col id='5'>50</col></row>"
-  "    </data>"
-  "  </object>"
-  "  <object class='GtkWindow' id='window1'>"
-  "    <child>"
-  "      <object class='GtkTreeView' id='treeview1'>"
-  "        <property name='visible'>True</property>"
-  "        <property name='model'>liststore1</property>"
-  "        <child>"
-  "          <object class='GtkTreeViewColumn' id='column1'>"
-  "            <property name='title' translatable='yes'>First column</property>"
-  "            <child>"
-  "              <object class='GtkCellRendererText' id='renderer1'>"
-  "              </object>"
-  "              <attributes>"
-  "                <attribute name='text'>0</attribute>"
-  "              </attributes>"
-  "            </child>"
-  "            <child>"
-  "              <object class='GtkCellRendererToggle' id='renderer2'>"
-  "              </object>"
-  "              <attributes>"
-  "                <attribute name='active'>3</attribute>"
-  "              </attributes>"
-  "            </child>"
-  "          </object>"
-  "        </child>"
-  "        <child>"
-  "          <object class='GtkTreeViewColumn' id='column2'>"
-  "            <property name='title' translatable='yes'>Second column</property>"
-  "            <child>"
-  "              <object class='GtkCellRendererText' id='renderer3'>"
-  "              </object>"
-  "              <attributes>"
-  "                <attribute name='text'>1</attribute>"
-  "              </attributes>"
-  "            </child>"
-  "            <child>"
-  "              <object class='GtkCellRendererProgress' id='renderer4'>"
-  "              </object>"
-  "              <attributes>"
-  "                <attribute name='value'>4</attribute>"
-  "              </attributes>"
-  "            </child>"
-  "          </object>"
-  "        </child>"
-  "      </object>"
-  "    </child>"
-  "  </object>"
-  "</interface>";
-
-static GtkWidget *
-builder_get_toplevel (GtkBuilder *builder)
-{
-  GSList *list, *walk;
-  GtkWidget *window = NULL;
-
-  list = gtk_builder_get_objects (builder);
-  for (walk = list; walk; walk = walk->next)
-    {
-      if (GTK_IS_WINDOW (walk->data) &&
-          gtk_widget_get_parent (walk->data) == NULL)
-        {
-          window = walk->data;
-          break;
-        }
-    }
-
-  g_slist_free (list);
-
-  return window;
-}
-
-const gchar tree_ui[] =
-  "<interface>"
-  "  <object class='GtkTreeStore' id='treestore1'>"
-  "    <columns>"
-  "      <column type='gchararray'/>"
-  "      <column type='gchararray'/>"
-  "      <column type='gchararray'/>"
-  "      <column type='gboolean'/>"
-  "      <column type='gint'/>"
-  "      <column type='gint'/>"
-  "    </columns>"
-  "  </object>"
-  "  <object class='GtkWindow' id='window1'>"
-  "    <child>"
-  "      <object class='GtkTreeView' id='treeview1'>"
-  "        <property name='visible'>True</property>"
-  "        <property name='model'>treestore1</property>"
-  "        <child>"
-  "          <object class='GtkTreeViewColumn' id='column1'>"
-  "            <property name='title' translatable='yes'>First column</property>"
-  "            <child>"
-  "              <object class='GtkCellRendererText' id='renderer1'>"
-  "              </object>"
-  "              <attributes>"
-  "                <attribute name='text'>0</attribute>"
-  "              </attributes>"
-  "            </child>"
-  "            <child>"
-  "              <object class='GtkCellRendererToggle' id='renderer2'>"
-  "              </object>"
-  "              <attributes>"
-  "                <attribute name='active'>3</attribute>"
-  "              </attributes>"
-  "            </child>"
-  "          </object>"
-  "        </child>"
-  "        <child>"
-  "          <object class='GtkTreeViewColumn' id='column2'>"
-  "            <property name='title' translatable='yes'>Second column</property>"
-  "            <child>"
-  "              <object class='GtkCellRendererText' id='renderer3'>"
-  "              </object>"
-  "              <attributes>"
-  "                <attribute name='text'>1</attribute>"
-  "              </attributes>"
-  "            </child>"
-  "            <child>"
-  "              <object class='GtkCellRendererProgress' id='renderer4'>"
-  "              </object>"
-  "              <attributes>"
-  "                <attribute name='value'>4</attribute>"
-  "              </attributes>"
-  "            </child>"
-  "          </object>"
-  "        </child>"
-  "      </object>"
-  "    </child>"
-  "  </object>"
-  "</interface>";
-
-static void
-populate_tree (GtkBuilder *builder)
-{
-  GtkTreeView *tv;
-  GtkTreeStore *store;
-  GtkTreeIter iter;
-
-  tv = (GtkTreeView *)gtk_builder_get_object (builder, "treeview1");
-  store = (GtkTreeStore *)gtk_tree_view_get_model (tv);
-
-  /* append some rows */
-  gtk_tree_store_append (store, &iter, NULL);
-  gtk_tree_store_set (store, &iter, 0, "a(1)", 1, "a(2)", 2, "a(3)", 3, TRUE, 4, 0, 5, 0, -1);
-  gtk_tree_store_append (store, &iter, &iter);
-  gtk_tree_store_set (store, &iter, 0, "aa(1)", 1, "aa(2)", 2, "aa(3)", 3, TRUE, 4, 0, 5, 0, -1);
-      gtk_tree_store_append (store, &iter, &iter);
-  gtk_tree_store_set (store, &iter, 0, "aaa(1)", 1, "aaa(2)", 2, "aaa(3)", 3, TRUE, 4, 0, 5, 0, -1);
-
-  gtk_tree_store_append (store, &iter, NULL);
-  gtk_tree_store_set (store, &iter, 0, "b(1)", 1, "b(2)", 2, "b(3)", 3, TRUE, 4, 0, 5, 0, -1);
-  gtk_tree_store_append (store, &iter, &iter);
-  gtk_tree_store_set (store, &iter, 0, "bb(1)", 1, "bb(2)", 2, "bb(3)", 3, TRUE, 4, 0, 5, 0, -1);
-      gtk_tree_store_append (store, &iter, &iter);
-  gtk_tree_store_set (store, &iter, 0, "bbb(1)", 1, "bbb(2)", 2, "bbb(3)", 3, TRUE, 4, 0, 5, 0, -1);
-}
-
-typedef struct {
-  gint count;
-  AtkObject *descendant;
-} SignalData;
-
-static void
-active_descendant_changed (AtkObject  *accessible,
-                  AtkObject *descendant,
-                  SignalData *data)
-{
-  data->count++;
-  if (data->descendant)
-    g_object_unref (data->descendant);
-  data->descendant = g_object_ref (descendant);
-}
-
-static gboolean
-quit_loop (gpointer data)
-{
-  GMainLoop *loop = data;
-  g_main_loop_quit (loop);
-  return FALSE;
-}
-
-static void
-process_pending_idles ()
-{
-  GMainLoop *loop = g_main_loop_new (NULL, FALSE);
-  gdk_threads_add_idle (quit_loop, loop);
-  g_main_loop_run (loop);
-}
-
-static void
-test_a11y_tree_focus (void)
-{
-  GtkBuilder *builder;
-  GtkWidget *window;
-  GError *error = NULL;
-  GtkTreeView *tv;
-  GtkTreePath *path = NULL;
-  GtkTreeViewColumn *focus_column = NULL;
-  SignalData data;
-  AtkObject *accessible;
-  AtkObject *child;
-  gchar *text;
-
-  builder = gtk_builder_new ();
-  gtk_builder_add_from_string (builder, tree_ui, -1, &error);
-  g_assert_no_error (error);
-  window = builder_get_toplevel (builder);
-  g_assert (window);
-
-  populate_tree (builder);
-
-  tv = (GtkTreeView *)gtk_builder_get_object (builder, "treeview1");
-  gtk_tree_view_expand_all (tv);
-
-  gtk_widget_show (window);
-
-  gtk_tree_view_get_cursor (tv, &path, &focus_column);
-  gtk_tree_path_down (path);
-  data.count = 0;
-  data.descendant = NULL;
-  accessible = gtk_widget_get_accessible (GTK_WIDGET (tv));
-  g_signal_connect (accessible, "active_descendant_changed",
-                    G_CALLBACK (active_descendant_changed), &data);
-  gtk_tree_view_set_cursor (tv, path, focus_column, FALSE);
-  /* hack: active_descendant_change gets fired in an idle handler */
-  process_pending_idles ();
-  /* Getting only one signal might be ideal, although we get three or so */
-  g_assert_cmpint (data.count, >=, 1);
-  child = atk_object_ref_accessible_child (data.descendant, 0);
-  text = atk_text_get_text (ATK_TEXT (child), 0, -1);
-  g_assert_cmpstr (text, ==, "aa(1)");
-  g_free (text);
-
-  g_object_unref (child);
-
-  g_object_unref (data.descendant);
-  g_object_unref (builder);
-
-}
-
-static AtkObject *
-find_root_accessible (GtkTreeView *tv, const char *name)
-{
-  AtkObject *tvaccessible = gtk_widget_get_accessible (GTK_WIDGET (tv));
-  int i = 0;
-
-  for (i = 0;;i++)
-  {
-    AtkObject *child = atk_object_ref_accessible_child (tvaccessible, i);
-    AtkObject *item;
-    gchar *text;
-    if (!child)
-      return NULL;
-    item = atk_object_ref_accessible_child (child, 0);
-    if (!item)
-      continue;
-    text = atk_text_get_text (ATK_TEXT (item), 0, -1);
-    g_object_unref (item);
-    if (!g_strcmp0 (text, name))
-    {
-      g_free (text);
-      return child;
-    }
-    g_free (text);
-    g_object_unref (child);
-  }
-}
-
-static void
-test_node_child_of (AtkObject *child, AtkObject *parent)
-{
-  AtkRelationSet *set = atk_object_ref_relation_set (child);
-  AtkRelation *relation = atk_relation_set_get_relation_by_type (set, ATK_RELATION_NODE_CHILD_OF);
-
-  g_assert (relation != NULL);
-  g_assert_cmpint (relation->target->len, ==, 1);
-  g_assert (g_ptr_array_index (relation->target, 0) == parent);
-  g_object_unref (set);
-}
-
-static void
-test_node_parent_of (AtkObject *parent, AtkObject *child)
-{
-  AtkRelationSet *set = atk_object_ref_relation_set (parent);
-  AtkRelation *relation = atk_relation_set_get_relation_by_type (set, ATK_RELATION_NODE_PARENT_OF);
-
-  g_assert (relation != NULL);
-  g_assert_cmpint (relation->target->len, ==, 1);
-  g_assert (g_ptr_array_index (relation->target, 0) == child);
-  g_object_unref (set);
-}
-
-static void
-test_relations (AtkObject *parent, AtkObject *child)
-{
-  test_node_parent_of (parent, child);
-  test_node_child_of (child, parent);
-}
-
-static void
-test_a11y_tree_relations (void)
-{
-  GtkBuilder *builder;
-  GtkWidget *window;
-  GError *error = NULL;
-  GtkTreeView *tv;
-  AtkObject *parent, *child;
-
-  builder = gtk_builder_new ();
-  gtk_builder_add_from_string (builder, tree_ui, -1, &error);
-  g_assert_no_error (error);
-  window = builder_get_toplevel (builder);
-  g_assert (window);
-
-  populate_tree (builder);
-
-  tv = (GtkTreeView *)gtk_builder_get_object (builder, "treeview1");
-  gtk_tree_view_expand_all (tv);
-
-  gtk_widget_show (window);
-
-  parent = find_root_accessible (tv, "a(1)");
-child = find_root_accessible (tv, "aa(1)");
-  test_relations (parent, child);
-  g_object_unref (parent);
-  parent = child;
-child = find_root_accessible (tv, "aaa(1)");
-  test_relations (parent, child);
-  g_object_unref (parent);
-  g_object_unref (child);
-
-  g_object_unref (builder);
-
-}
-
-int
-main (int argc, char *argv[])
-{
-  gtk_test_init (&argc, &argv, NULL);
-
-  g_test_add_func ("/a11y/tree/focus", test_a11y_tree_focus);
-  g_test_add_func ("/a11y/tree/relations", test_a11y_tree_relations);
-
-  return g_test_run ();
-}
-
diff --git a/tests/a11y/util.c b/tests/a11y/util.c
deleted file mode 100644 (file)
index 906c98b..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Copyright (C) 2011 Red Hat Inc.
- *
- * Author:
- *      Matthias Clasen <mclasen@redhat.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include <gtk/gtk.h>
-
-static void
-test_toolkit_name (void)
-{
-  const gchar *s;
-
-  s = atk_get_toolkit_name ();
-  g_assert_cmpstr (s, ==, "gtk");
-}
-
-static void
-test_toolkit_version (void)
-{
-  const gchar *s;
-
-  s = atk_get_toolkit_version ();
-  g_assert_cmpstr (s, ==, GTK_VERSION);
-}
-
-static void
-test_root (void)
-{
-  AtkObject *obj;
-
-  obj = atk_get_root ();
-
-  g_assert (atk_object_get_role (obj) == ATK_ROLE_APPLICATION);
-  g_assert (atk_object_get_parent (obj) == NULL);
-}
-
-int
-main (int argc, char *argv[])
-{
-  gtk_test_init (&argc, &argv, NULL);
-
-  g_test_add_func ("/util/toolkit-name", test_toolkit_name);
-  g_test_add_func ("/util/toolkit-version", test_toolkit_version);
-  g_test_add_func ("/util/root", test_root);
-
-  return g_test_run ();
-}
diff --git a/tests/a11y/value.c b/tests/a11y/value.c
deleted file mode 100644 (file)
index af50a36..0000000
+++ /dev/null
@@ -1,127 +0,0 @@
-/*
- * Copyright (C) 2011 Red Hat Inc.
- * Copyright (C) 2012 SUSE LLC.
- *
- * Author:
- *      Mike Gorse <mgorse@suse.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include <gtk/gtk.h>
-#include <string.h>
-
-static void
-set_value (GtkWidget   *widget,
-           gint value)
-{
-  if (GTK_IS_LEVEL_BAR (widget))
-    gtk_level_bar_set_value (GTK_LEVEL_BAR (widget), value);
-  else if (GTK_IS_RANGE (widget))
-    {
-      GtkAdjustment *adjustment = gtk_range_get_adjustment (GTK_RANGE (widget));
-      gtk_adjustment_set_value (adjustment, value);
-    }
-  else if (GTK_IS_SPIN_BUTTON (widget))
-    {
-      GtkAdjustment *adjustment = gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON (widget));
-      gtk_adjustment_set_value (adjustment, value);
-    }
-}
-
-typedef struct
-{
-  gint count;
-  gchar *last_name;
-} NotifyData;
-
-static void
-notify_cb (GObject    *obj,
-           GParamSpec *pspec, NotifyData *data)
-{
-  data->count++;
-  if (data->last_name)
-    g_free (data->last_name);
-  data->last_name = g_strdup (pspec->name);
-}
-
-static void
-test_basic (GtkWidget *widget)
-{
-  NotifyData notify_data;
-  AtkObject *atk_object;
-  AtkValue *atk_value;
-  gdouble value = 50;
-  GValue ret;
-
-  atk_object = gtk_widget_get_accessible (widget);
-  atk_value = ATK_VALUE (atk_object);
-
-  memset (&notify_data, 0, sizeof (notify_data));
-  g_signal_connect (atk_object, "notify", G_CALLBACK (notify_cb), &notify_data);
-  set_value (widget, value);
-  g_assert_cmpint (notify_data.count, ==, 1);
-  g_assert_cmpstr (notify_data.last_name, ==, "accessible-value");
-
-  memset (&ret, 0, sizeof (ret));
-  atk_value_get_current_value (atk_value, &ret);
-  g_assert_cmpfloat (g_value_get_double (&ret), ==, value);
-
-  g_free (notify_data.last_name);
-  g_signal_handlers_disconnect_by_func (atk_object, G_CALLBACK (notify_cb), &notify_data);
-}
-
-static void
-setup_test (GtkWidget *widget)
-{
-  set_value (widget, 0);
-}
-
-static void
-add_value_test (const gchar      *prefix,
-               GTestFixtureFunc  test_func,
-               GtkWidget        *widget)
-{
-  gchar *path;
-
-  path = g_strdup_printf ("%s/%s", prefix, G_OBJECT_TYPE_NAME (widget));
-  g_test_add_vtable (path,
-                     0,
-                     g_object_ref (widget),
-                     (GTestFixtureFunc) setup_test,
-                     (GTestFixtureFunc) test_func,
-                     (GTestFixtureFunc) g_object_unref);
-  g_free (path);
-}
-
-static void
-add_value_tests (GtkWidget *widget)
-{
-  g_object_ref_sink (widget);
-  add_value_test ("/value/basic", (GTestFixtureFunc) test_basic, widget);
-  g_object_unref (widget);
-}
-
-int
-main (int argc, char *argv[])
-{
-  gtk_test_init (&argc, &argv, NULL);
-
-  g_test_bug_base ("http://bugzilla.gnome.org/");
-
-  add_value_tests (gtk_spin_button_new_with_range (0, 100, 1));
-  add_value_tests (gtk_level_bar_new_for_interval (0, 100));
-
-  return g_test_run ();
-}
index 11f7e79c9e0236cf107d967f60fccebd673d87c7..221461d70a6f98ce669520b6d7ae5dbd897eb621 100644 (file)
@@ -1,6 +1,6 @@
 include $(top_srcdir)/Makefile.decl
 
-SUBDIRS = gdk gtk
+SUBDIRS = gdk gtk a11y
 
 -include $(top_srcdir)/git.mk
 
diff --git a/testsuite/a11y/Makefile.am b/testsuite/a11y/Makefile.am
new file mode 100644 (file)
index 0000000..47b9a96
--- /dev/null
@@ -0,0 +1,110 @@
+include $(top_srcdir)/Makefile.decl
+NULL =
+
+check_PROGRAMS = $(TEST_PROGS)
+
+AM_CPPFLAGS =                          \
+       -I$(top_srcdir)                 \
+       -I$(top_builddir)/gdk           \
+       -I$(top_srcdir)/gdk             \
+       -DGDK_DISABLE_DEPRECATED        \
+       -DGTK_DISABLE_DEPRECATED        \
+       -DGTK_VERSION=\"$(GTK_VERSION)\"\
+       $(GTK_DEBUG_FLAGS)              \
+       $(GTK_DEP_CFLAGS)
+
+LDADD = \
+       $(top_builddir)/gdk/libgdk-3.la \
+       $(top_builddir)/gtk/libgtk-3.la \
+       $(GTK_DEP_LIBS)
+
+# work around random file systems showing up in the file chooser,
+# breaking the 'pickers' test
+TESTS_ENVIRONMENT = GIO_USE_VOLUME_MONITOR=unix
+
+TEST_PROGS += accessibility-dump
+
+TEST_PROGS += tree-performance
+
+TEST_PROGS += text
+
+TEST_PROGS += children
+
+TEST_PROGS += derive
+
+TEST_PROGS += value
+
+# the focus test has no chance of working until
+# all the idle handlers in gail are gone
+#
+# TEST_PROGS += focus
+
+TEST_PROGS += tree-relationships
+
+TEST_PROGS += util
+
+noinst_PROGS = testfocus
+
+testdata = \
+       hello-world.ui hello-world.txt \
+       mnemonic.ui mnemonic.txt \
+       accessible-name.ui accessible-name.txt \
+       notebook.ui notebook.txt \
+       range.ui range.txt \
+       link.ui link.txt \
+       text.ui text.txt \
+       buttons.ui buttons.txt \
+       colorchooser.ui colorchooser.txt \
+       about.ui about.txt \
+       messagedialog.ui messagedialog.txt \
+       expander.ui expander.txt \
+       assistant.ui assistant.txt \
+       pickers.ui pickers.txt \
+       lockbutton.ui lockbutton.txt \
+       spinner.ui spinner.txt \
+       progress.ui progress.txt \
+       infobar.ui infobar.txt \
+       calendar.ui calendar.txt \
+       statusbar.ui statusbar.txt \
+       paned.ui paned.txt \
+       iconview.ui iconview.txt \
+       entries.ui entries.txt \
+       scale-drawvalue.ui scale-drawvalue.txt \
+       placeholder-text.ui placeholder-text.txt \
+       menu.ui menu.txt \
+       combos.ui combos.txt \
+       $(NULL)
+
+if BUILDOPT_INSTALL_TESTS
+insttestdir=$(pkglibexecdir)/installed-tests
+insttest_PROGRAMS = $(TEST_PROGS)
+
+a11ytestdir = $(insttestdir)/a11ytests
+a11ytest_DATA = $(testdata)
+
+substitutions = \
+       -e s,@pkglibexecdir\@,$(pkglibexecdir),g \
+       $(NULL)
+
+test_in_files = \
+       a11ytests.test.in \
+       a11ychildren.test.in \
+       a11ytree.test.in \
+       a11yvalue.test.in \
+       a11yderive.test.in \
+       a11ytext.test.in \
+       a11yutil.test.in \
+       $(NULL)
+
+test_files = $(test_in_files:.test.in=.test)
+
+$(test_files): %.test: %.test.in
+       $(AM_V_GEN) sed $(substitutions) $< > $@.tmp && mv $@.tmp $@
+
+EXTRA_DIST += $(test_in_files)
+
+testmetadir = $(datadir)/installed-tests/$(PACKAGE)
+testmeta_DATA = $(test_files)
+endif
+
+-include $(top_srcdir)/git.mk
diff --git a/testsuite/a11y/README b/testsuite/a11y/README
new file mode 100644 (file)
index 0000000..434b0d7
--- /dev/null
@@ -0,0 +1,18 @@
+accessibility-dump is a test runner that can do tests of static
+accessibility information. Run it like this:
+
+./accessibility-dump [OPTIONS] TESTFILE [TESTFILES...]
+
+where TESTFILE is a GtkBuilder .ui file. accessibility-dump creates
+a textual dump of the accessibility information for the created
+widget hierarchy and compares it to a preexisting .txt file.
+
+To create an initial dump, you can use the --generate option with
+a single .ui file. You should carefully inspect the output before
+blessing it as the official .txt to compare against.
+
+To find out details about a failure, you can use the --verbose
+option to see differences between expected and actual output.
+
+When run without any arguments, all the .ui files in the current
+directory are tested.
diff --git a/testsuite/a11y/a11ychildren.test.in b/testsuite/a11y/a11ychildren.test.in
new file mode 100644 (file)
index 0000000..927cfe3
--- /dev/null
@@ -0,0 +1,4 @@
+[Test]
+Exec=/bin/sh -c "@pkglibexecdir@/installed-tests/children"
+Type=session
+
diff --git a/testsuite/a11y/a11yderive.test.in b/testsuite/a11y/a11yderive.test.in
new file mode 100644 (file)
index 0000000..665b2e9
--- /dev/null
@@ -0,0 +1,4 @@
+[Test]
+Exec=/bin/sh -c "@pkglibexecdir@/installed-tests/derive"
+Type=session
+
diff --git a/testsuite/a11y/a11ytests.test.in b/testsuite/a11y/a11ytests.test.in
new file mode 100644 (file)
index 0000000..e794dcf
--- /dev/null
@@ -0,0 +1,4 @@
+[Test]
+Exec=/bin/sh -c "@pkglibexecdir@/installed-tests/accessibility-dump --directory @pkglibexecdir@/installed-tests/a11ytests"
+Type=session
+
diff --git a/testsuite/a11y/a11ytext.test.in b/testsuite/a11y/a11ytext.test.in
new file mode 100644 (file)
index 0000000..c3435ed
--- /dev/null
@@ -0,0 +1,4 @@
+[Test]
+Exec=/bin/sh -c "@pkglibexecdir@/installed-tests/text"
+Type=session
+
diff --git a/testsuite/a11y/a11ytree.test.in b/testsuite/a11y/a11ytree.test.in
new file mode 100644 (file)
index 0000000..390d1a5
--- /dev/null
@@ -0,0 +1,4 @@
+[Test]
+Exec=/bin/sh -c "@pkglibexecdir@/installed-tests/tree-relationships"
+Type=session
+
diff --git a/testsuite/a11y/a11yutil.test.in b/testsuite/a11y/a11yutil.test.in
new file mode 100644 (file)
index 0000000..9140b9f
--- /dev/null
@@ -0,0 +1,4 @@
+[Test]
+Exec=/bin/sh -c "@pkglibexecdir@/installed-tests/util"
+Type=session
+
diff --git a/testsuite/a11y/a11yvalue.test.in b/testsuite/a11y/a11yvalue.test.in
new file mode 100644 (file)
index 0000000..ddc16e2
--- /dev/null
@@ -0,0 +1,4 @@
+[Test]
+Exec=/bin/sh -c "@pkglibexecdir@/installed-tests/value"
+Type=session
+
diff --git a/testsuite/a11y/about.txt b/testsuite/a11y/about.txt
new file mode 100644 (file)
index 0000000..d0fb340
--- /dev/null
@@ -0,0 +1,531 @@
+window1
+  "dialog"
+  index: 0
+  name: About FancyPants
+  state: enabled sensitive showing visible
+  toolkit: gtk
+  <AtkComponent>
+  layer: window
+  alpha: 1
+  dialog-vbox1
+    "filler"
+    parent: window1
+    index: 0
+    state: enabled sensitive showing vertical visible
+    toolkit: gtk
+    <AtkComponent>
+    layer: widget
+    alpha: 1
+    box
+      "filler"
+      parent: dialog-vbox1
+      index: 0
+      state: enabled sensitive showing vertical visible
+      toolkit: gtk
+      <AtkComponent>
+      layer: widget
+      alpha: 1
+      logo_image
+        "icon"
+        parent: box
+        index: 0
+        state: enabled sensitive showing visible
+        toolkit: gtk
+        <AtkComponent>
+        layer: widget
+        alpha: 1
+        <AtkImage>
+        image size: 20 x 20
+        image description: (null)
+      name_label
+        "label"
+        parent: box
+        index: 1
+        name: FancyPants
+        state: enabled focusable multi-line sensitive showing visible
+        toolkit: gtk
+        <AtkComponent>
+        layer: widget
+        alpha: 1
+        <AtkText>
+        text: FancyPants
+        character count: 10
+        caret offset: 0
+        default attributes: bg-color: <omitted>
+                            bg-full-height: 0
+                            direction: <omitted>
+                            editable: false
+                            family-name: <omitted>
+                            fg-color: <omitted>
+                            indent: 0
+                            invisible: false
+                            justification: center
+                            language: <omitted>
+                            left-margin: 0
+                            pixels-above-lines: 0
+                            pixels-below-lines: 0
+                            pixels-inside-wrap: 0
+                            right-margin: 0
+                            rise: 0
+                            scale: 1
+                            size: <omitted>
+                            stretch: <omitted>
+                            strikethrough: false
+                            style: <omitted>
+                            underline: none
+                            variant: <omitted>
+                            weight: <omitted>
+                            wrap-mode: word
+      notebook
+        "page tab list"
+        parent: box
+        index: 2
+        state: enabled sensitive showing visible
+        toolkit: gtk
+        <AtkComponent>
+        layer: widget
+        alpha: 1
+        <AtkSelection>
+        selected children: unnamed-GtkNotebookPageAccessible-0
+        unnamed-GtkNotebookPageAccessible-0
+          "page tab"
+          parent: notebook
+          index: 0
+          state: enabled selectable selected showing visible
+          <AtkComponent>
+          layer: widget
+          alpha: 1
+          page_vbox
+            "filler"
+            index: 0
+            state: enabled sensitive showing vertical visible
+            toolkit: gtk
+            <AtkComponent>
+            layer: widget
+            alpha: 1
+            version_label
+              "label"
+              parent: page_vbox
+              index: 0
+              name: 0.99
+              state: enabled focusable multi-line sensitive showing visible
+              toolkit: gtk
+              <AtkComponent>
+              layer: widget
+              alpha: 1
+              <AtkText>
+              text: 0.99
+              character count: 4
+              caret offset: 0
+              default attributes: bg-color: <omitted>
+                                  bg-full-height: 0
+                                  direction: <omitted>
+                                  editable: false
+                                  family-name: <omitted>
+                                  fg-color: <omitted>
+                                  indent: 0
+                                  invisible: false
+                                  justification: center
+                                  language: <omitted>
+                                  left-margin: 0
+                                  pixels-above-lines: 0
+                                  pixels-below-lines: 0
+                                  pixels-inside-wrap: 0
+                                  right-margin: 0
+                                  rise: 0
+                                  scale: 1
+                                  size: <omitted>
+                                  stretch: <omitted>
+                                  strikethrough: false
+                                  style: <omitted>
+                                  underline: none
+                                  variant: <omitted>
+                                  weight: <omitted>
+                                  wrap-mode: word
+            comments_label
+              "label"
+              parent: page_vbox
+              index: 1
+              name: comments
+              state: enabled focusable multi-line sensitive showing visible
+              toolkit: gtk
+              <AtkComponent>
+              layer: widget
+              alpha: 1
+              <AtkText>
+              text: comments
+              character count: 8
+              caret offset: 0
+              default attributes: bg-color: <omitted>
+                                  bg-full-height: 0
+                                  direction: <omitted>
+                                  editable: false
+                                  family-name: <omitted>
+                                  fg-color: <omitted>
+                                  indent: 0
+                                  invisible: false
+                                  justification: center
+                                  language: <omitted>
+                                  left-margin: 0
+                                  pixels-above-lines: 0
+                                  pixels-below-lines: 0
+                                  pixels-inside-wrap: 0
+                                  right-margin: 0
+                                  rise: 0
+                                  scale: 1
+                                  size: <omitted>
+                                  stretch: <omitted>
+                                  strikethrough: false
+                                  style: <omitted>
+                                  underline: none
+                                  variant: <omitted>
+                                  weight: <omitted>
+                                  wrap-mode: word
+            hbox
+              "filler"
+              parent: page_vbox
+              index: 2
+              state: enabled horizontal sensitive showing visible
+              toolkit: gtk
+              <AtkComponent>
+              layer: widget
+              alpha: 1
+              website_label
+                "label"
+                parent: hbox
+                index: 0
+                name: Website
+                state: enabled focusable multi-line sensitive showing visible
+                toolkit: gtk
+                <AtkComponent>
+                layer: widget
+                alpha: 1
+                <AtkText>
+                text: Website
+                character count: 7
+                caret offset: 0
+                default attributes: bg-color: <omitted>
+                                    bg-full-height: 0
+                                    direction: <omitted>
+                                    editable: false
+                                    family-name: <omitted>
+                                    fg-color: <omitted>
+                                    indent: 0
+                                    invisible: false
+                                    justification: left
+                                    language: <omitted>
+                                    left-margin: 0
+                                    pixels-above-lines: 0
+                                    pixels-below-lines: 0
+                                    pixels-inside-wrap: 0
+                                    right-margin: 0
+                                    rise: 0
+                                    scale: 1
+                                    size: <omitted>
+                                    stretch: <omitted>
+                                    strikethrough: false
+                                    style: <omitted>
+                                    underline: none
+                                    variant: <omitted>
+                                    weight: <omitted>
+                                    wrap-mode: word
+            copyright_label
+              "label"
+              parent: page_vbox
+              index: 3
+              name: no comments
+              state: enabled focusable multi-line sensitive showing visible
+              toolkit: gtk
+              <AtkComponent>
+              layer: widget
+              alpha: 1
+              <AtkText>
+              text: no comments
+              character count: 11
+              caret offset: 0
+              default attributes: bg-color: <omitted>
+                                  bg-full-height: 0
+                                  direction: <omitted>
+                                  editable: false
+                                  family-name: <omitted>
+                                  fg-color: <omitted>
+                                  indent: 0
+                                  invisible: false
+                                  justification: center
+                                  language: <omitted>
+                                  left-margin: 0
+                                  pixels-above-lines: 0
+                                  pixels-below-lines: 0
+                                  pixels-inside-wrap: 0
+                                  right-margin: 0
+                                  rise: 0
+                                  scale: 1
+                                  size: <omitted>
+                                  stretch: <omitted>
+                                  strikethrough: false
+                                  style: <omitted>
+                                  underline: none
+                                  variant: <omitted>
+                                  weight: <omitted>
+                                  wrap-mode: word
+            license_label
+              "label"
+              parent: page_vbox
+              index: 4
+              name: This program comes with ABSOLUTELY NO WARRANTY;
+for details, visit http://www.gnu.org/licenses/gpl.html
+              state: enabled focusable multi-line sensitive showing visible
+              toolkit: gtk
+              <AtkComponent>
+              layer: widget
+              alpha: 1
+              <AtkText>
+              text: This program comes with ABSOLUTELY NO WARRANTY;
+for details, visit http://www.gnu.org/licenses/gpl.html
+              character count: 103
+              caret offset: 67
+              default attributes: bg-color: <omitted>
+                                  bg-full-height: 0
+                                  direction: <omitted>
+                                  editable: false
+                                  family-name: <omitted>
+                                  fg-color: <omitted>
+                                  indent: 0
+                                  invisible: false
+                                  justification: center
+                                  language: <omitted>
+                                  left-margin: 0
+                                  pixels-above-lines: 0
+                                  pixels-below-lines: 0
+                                  pixels-inside-wrap: 0
+                                  right-margin: 0
+                                  rise: 0
+                                  scale: 1
+                                  size: <omitted>
+                                  stretch: <omitted>
+                                  strikethrough: false
+                                  style: <omitted>
+                                  underline: none
+                                  variant: <omitted>
+                                  weight: <omitted>
+                                  wrap-mode: word
+        unnamed-GtkNotebookPageAccessible-1
+          "page tab"
+          parent: notebook
+          index: 1
+          state: enabled selectable visible
+          <AtkComponent>
+          layer: widget
+          alpha: 1
+          credits_page
+            "filler"
+            index: 0
+            state: enabled sensitive vertical visible
+            toolkit: gtk
+            <AtkComponent>
+            layer: widget
+            alpha: 1
+            scrolledwindow1
+              "scroll pane"
+              parent: credits_page
+              index: 0
+              state: enabled focusable sensitive visible
+              toolkit: gtk
+              <AtkComponent>
+              layer: widget
+              alpha: 1
+              viewport1
+                "viewport"
+                parent: scrolledwindow1
+                index: 0
+                state: enabled sensitive visible
+                toolkit: gtk
+                <AtkComponent>
+                layer: widget
+                alpha: 1
+                credits_grid
+                  "panel"
+                  parent: viewport1
+                  index: 0
+                  state: enabled sensitive vertical visible
+                  toolkit: gtk
+                  <AtkComponent>
+                  layer: widget
+                  alpha: 1
+              unnamed-GtkRangeAccessible-2
+                "scroll bar"
+                parent: scrolledwindow1
+                state: enabled horizontal sensitive visible
+                toolkit: gtk
+                <AtkComponent>
+                layer: widget
+                alpha: 1
+                <AtkValue>
+                minimum value: 0.000000
+                maximum value: 0.000000
+                current value: 0.000000
+                minimum increment: 39.800000
+              unnamed-GtkRangeAccessible-3
+                "scroll bar"
+                parent: scrolledwindow1
+                state: enabled sensitive vertical visible
+                toolkit: gtk
+                <AtkComponent>
+                layer: widget
+                alpha: 1
+                <AtkValue>
+                minimum value: 0.000000
+                maximum value: 0.000000
+                current value: 0.000000
+                minimum increment: 14.400000
+        unnamed-GtkNotebookPageAccessible-4
+          "page tab"
+          parent: notebook
+          index: 2
+          state: enabled selectable visible
+          <AtkComponent>
+          layer: widget
+          alpha: 1
+          license_page
+            "filler"
+            index: 0
+            state: enabled sensitive vertical visible
+            toolkit: gtk
+            <AtkComponent>
+            layer: widget
+            alpha: 1
+            scrolledwindow2
+              "scroll pane"
+              parent: license_page
+              index: 0
+              state: enabled focusable sensitive visible
+              toolkit: gtk
+              <AtkComponent>
+              layer: widget
+              alpha: 1
+              license_view
+                "text"
+                parent: scrolledwindow2
+                index: 0
+                state: enabled focusable multi-line sensitive visible
+                toolkit: gtk
+                <AtkComponent>
+                layer: widget
+                alpha: 1
+                <AtkText>
+                text: 
+                character count: 0
+                caret offset: 0
+                default attributes: bg-color: <omitted>
+                                    bg-full-height: false
+                                    direction: <omitted>
+                                    editable: false
+                                    family-name: <omitted>
+                                    fg-color: <omitted>
+                                    indent: 0
+                                    invisible: false
+                                    justification: left
+                                    language: <omitted>
+                                    left-margin: 8
+                                    pixels-above-lines: 0
+                                    pixels-below-lines: 0
+                                    pixels-inside-wrap: 0
+                                    right-margin: 8
+                                    rise: 0
+                                    scale: 1
+                                    size: <omitted>
+                                    stretch: <omitted>
+                                    strikethrough: false
+                                    style: <omitted>
+                                    underline: none
+                                    variant: <omitted>
+                                    weight: <omitted>
+                                    wrap-mode: none
+                <AtkStreamableContent>
+                mime types: application/x-gtk-text-buffer-rich-text text/plain
+              unnamed-GtkRangeAccessible-5
+                "scroll bar"
+                parent: scrolledwindow2
+                state: enabled horizontal sensitive visible
+                toolkit: gtk
+                <AtkComponent>
+                layer: widget
+                alpha: 1
+                <AtkValue>
+                minimum value: 0.000000
+                maximum value: 0.000000
+                current value: 0.000000
+                minimum increment: 39.800000
+              unnamed-GtkRangeAccessible-6
+                "scroll bar"
+                parent: scrolledwindow2
+                state: enabled sensitive vertical visible
+                toolkit: gtk
+                <AtkComponent>
+                layer: widget
+                alpha: 1
+                <AtkValue>
+                minimum value: 0.000000
+                maximum value: 0.000000
+                current value: 0.000000
+                minimum increment: 14.400000
+    dialog-action_area1
+      "filler"
+      parent: dialog-vbox1
+      index: 1
+      state: enabled horizontal sensitive showing visible
+      toolkit: gtk
+      <AtkComponent>
+      layer: widget
+      alpha: 1
+      close_button
+        "push button"
+        parent: dialog-action_area1
+        index: 0
+        name: Close
+        state: enabled focusable sensitive showing visible default
+        toolkit: gtk
+        <AtkComponent>
+        layer: widget
+        alpha: 1
+        <AtkImage>
+        image size: 20 x 20
+        image description: (null)
+        <AtkAction>
+        action 0 name: click
+        action 0 description: Clicks the button
+        action 0 keybinding: <Alt>c
+      license_button
+        "toggle button"
+        parent: dialog-action_area1
+        index: 1
+        name: License
+        state: enabled focusable sensitive
+        toolkit: gtk
+        <AtkComponent>
+        layer: widget
+        alpha: 1
+        <AtkImage>
+        image size: -1 x -1
+        image description: (null)
+        <AtkAction>
+        action 0 name: click
+        action 0 description: Clicks the button
+        action 0 keybinding: <Alt>l
+      credits_button
+        "toggle button"
+        parent: dialog-action_area1
+        index: 2
+        name: Credits
+        state: enabled focusable sensitive
+        toolkit: gtk
+        <AtkComponent>
+        layer: widget
+        alpha: 1
+        <AtkImage>
+        image size: 20 x 20
+        image description: (null)
+        <AtkAction>
+        action 0 name: click
+        action 0 description: Clicks the button
+        action 0 keybinding: <Alt>r
diff --git a/testsuite/a11y/about.ui b/testsuite/a11y/about.ui
new file mode 100644 (file)
index 0000000..baf99f3
--- /dev/null
@@ -0,0 +1,12 @@
+
+<interface>
+  <!-- interface-requires gtk+ 3.0 -->
+  <object class="GtkAboutDialog" id="window1">
+    <property name="program-name">FancyPants</property>
+    <property name="version">0.99</property>
+    <property name="copyright">no comments</property>
+    <property name="comments">comments</property>
+    <property name="license-type">gpl-3-0</property>
+    <property name="website">http://www.gtk.org</property>
+  </object>
+</interface>
diff --git a/testsuite/a11y/accessibile-name.txt b/testsuite/a11y/accessibile-name.txt
new file mode 100644 (file)
index 0000000..27d9076
--- /dev/null
@@ -0,0 +1,44 @@
+window1
+  "window"
+  index: 0
+  state: enabled resizable sensitive showing visible
+  toolkit: gail
+  button1
+    "push button"
+    parent: window1
+    index: 0
+    name: Accessible name
+    state: enabled focusable sensitive showing visible
+    toolkit: gail
+    text: Hello World!
+    character count: 12
+    caret offset: 0
+    default attributes: left-margin: 0
+                        right-margin: 0
+                        indent: 0
+                        invisible: false
+                        editable: false
+                        pixels-above-lines: 0
+                        pixels-below-lines: 0
+                        pixels-inside-wrap: 0
+                        bg-full-height: 0
+                        scale: 1
+                        rise: 0
+                        underline: none
+                        strikethrough: false
+                        bg-stipple: false
+                        fg-stipple: false
+                        fg-color: <omitted>
+                        bg-color: <omitted>
+                        wrap-mode: word
+                        justification: left
+                        size: <omitted>
+                        weight: <omitted>
+                        family-name: <omitted>
+                        stretch: <omitted>
+                        variant: <omitted>
+                        style: <omitted>
+                        language: <omitted>
+                        direction: <omitted>
+    image size: -1 x -1
+    image description: (null)
diff --git a/testsuite/a11y/accessibility-dump.c b/testsuite/a11y/accessibility-dump.c
new file mode 100644 (file)
index 0000000..62541a1
--- /dev/null
@@ -0,0 +1,901 @@
+/*
+ * Copyright (C) 2011 Red Hat Inc.
+ *
+ * Author:
+ *      Benjamin Otte <otte@redhat.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "config.h"
+
+#include <string.h>
+#include <glib/gstdio.h>
+#include <gtk/gtk.h>
+
+#define DEPTH_INCREMENT 2
+
+static char *
+get_test_file (const char *test_file,
+               const char *extension,
+               gboolean    must_exist)
+{
+  GString *file = g_string_new (NULL);
+
+  if (g_str_has_suffix (test_file, ".ui"))
+    g_string_append_len (file, test_file, strlen (test_file) - strlen (".ui"));
+  else
+    g_string_append (file, test_file);
+  
+  g_string_append (file, extension);
+
+  if (must_exist &&
+      !g_file_test (file->str, G_FILE_TEST_EXISTS))
+    {
+      g_string_free (file, TRUE);
+      return NULL;
+    }
+
+  return g_string_free (file, FALSE);
+}
+
+static char *
+diff_with_file (const char  *file1,
+                char        *text,
+                gssize       len,
+                GError     **error)
+{
+  const char *command[] = { "diff", "-u", file1, NULL, NULL };
+  char *diff, *tmpfile;
+  int fd;
+
+  diff = NULL;
+
+  if (len < 0)
+    len = strlen (text);
+  
+  /* write the text buffer to a temporary file */
+  fd = g_file_open_tmp (NULL, &tmpfile, error);
+  if (fd < 0)
+    return NULL;
+
+  if (write (fd, text, len) != (int) len)
+    {
+      close (fd);
+      g_set_error (error,
+                   G_FILE_ERROR, G_FILE_ERROR_FAILED,
+                   "Could not write data to temporary file '%s'", tmpfile);
+      goto done;
+    }
+  close (fd);
+  command[3] = tmpfile;
+
+  /* run diff command */
+  g_spawn_sync (NULL,
+                (char **) command,
+                NULL,
+                G_SPAWN_SEARCH_PATH,
+                NULL, NULL,
+               &diff,
+                NULL, NULL,
+                error);
+
+done:
+  g_unlink (tmpfile);
+  g_free (tmpfile);
+
+  return diff;
+}
+
+static int unnamed_object_count;
+
+static void
+setup_test (void)
+{
+  unnamed_object_count = 0;
+}
+
+static const char *
+get_name (AtkObject *accessible)
+{
+  char *name;
+
+  name = g_object_get_data (G_OBJECT (accessible), "gtk-accessibility-dump-name");
+  if (name)
+    return name;
+
+  if (GTK_IS_ACCESSIBLE (accessible))
+    {
+      GtkWidget *widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (accessible));
+
+      name = g_strdup (gtk_buildable_get_name (GTK_BUILDABLE (widget)));
+    }
+
+  if (name == NULL && ATK_IS_TEXT (accessible))
+    {
+      name = atk_text_get_text (ATK_TEXT (accessible), 0, -1);
+    }
+
+  if (name == NULL)
+    {
+      /* Generate a unique, repeatable name */
+      name = g_strdup_printf ("unnamed-%s-%d", G_OBJECT_TYPE_NAME (accessible), unnamed_object_count++);
+    }
+
+  g_object_set_data_full (G_OBJECT (accessible), "gtk-accessibility-dump-name", name, g_free);
+  return name;
+}
+
+static void
+dump_relation (GString     *string,
+               guint        depth,
+               AtkRelation *relation)
+{
+  GPtrArray *targets;
+  const char *name;
+  guint i;
+
+  targets = atk_relation_get_target (relation);
+  if (targets == NULL || targets->len == 0)
+    return;
+
+  name = atk_relation_type_get_name (atk_relation_get_relation_type (relation));
+  g_string_append_printf (string, "%*s%s: %s\n", depth, "", name, get_name (g_ptr_array_index (targets, 0)));
+  depth += strlen (name) + 2;
+
+  for (i = 1; i < targets->len; i++)
+    {
+      g_string_append_printf (string, "%*s%s\n", depth, "", get_name (g_ptr_array_index (targets, i)));
+    }
+}
+
+static void
+dump_relation_set (GString        *string,
+                   guint           depth,
+                   AtkRelationSet *set)
+{
+  guint i;
+
+  if (set == NULL)
+    return;
+
+  for (i = 0; i < atk_relation_set_get_n_relations (set); i++)
+    {
+      AtkRelation *relation;
+      
+      relation = atk_relation_set_get_relation (set, i);
+
+      dump_relation (string, depth, relation);
+    }
+
+  g_object_unref (set);
+}
+
+static void
+dump_state_set (GString     *string,
+                guint        depth,
+                AtkStateSet *set)
+{
+  guint i;
+
+  if (set == NULL)
+    return;
+
+  if (!atk_state_set_is_empty (set))
+    {
+      g_string_append_printf (string, "%*sstate:", depth, "");
+      for (i = 0; i < ATK_STATE_LAST_DEFINED; i++)
+        {
+          if (atk_state_set_contains_state (set, i))
+            g_string_append_printf (string, " %s", atk_state_type_get_name (i));
+        }
+      g_string_append_c (string, '\n');
+    }
+
+  g_object_unref (set);
+}
+
+static void
+dump_attribute (GString      *string,
+                guint         depth,
+                AtkAttribute *attribute)
+{
+  g_string_append_printf (string, "%*s%s: %s\n", depth, "", attribute->name, attribute->value);
+}
+
+static void
+dump_attribute_set (GString         *string,
+                    guint            depth,
+                    AtkAttributeSet *set)
+{
+  GSList *l;
+  AtkAttribute *attribute;
+
+  for (l = set; l; l = l->next)
+    {
+      attribute = l->data;
+
+      dump_attribute (string, depth, attribute);
+    }
+}
+
+static gint
+compare_attr (gconstpointer a, gconstpointer b)
+{
+  const AtkAttribute *aattr = a;
+  const AtkAttribute *battr = b;
+
+  return strcmp (aattr->name, battr->name);
+}
+
+static void
+dump_text_attributes (GString         *string,
+                      gint             depth,
+                      const gchar     *name,
+                      AtkAttributeSet *attributes)
+{
+  GSList *l;
+  AtkAttribute *attr;
+  const gchar *value;
+
+  if (attributes == NULL)
+    return;
+
+  attributes = g_slist_sort (attributes, compare_attr);
+
+  for (l = attributes; l; l = l->next)
+    {
+      attr = l->data;
+      /* don't dump values that depend on the environment */
+      if (strcmp (attr->name, "family-name") == 0 ||
+          strcmp (attr->name, "size") == 0 ||
+          strcmp (attr->name, "weight") == 0 ||
+          strcmp (attr->name, "stretch") == 0 ||
+          strcmp (attr->name, "variant") == 0 ||
+          strcmp (attr->name, "style") == 0 ||
+          strcmp (attr->name, "language") == 0 ||
+          strcmp (attr->name, "fg-color") == 0 ||
+          strcmp (attr->name, "bg-color") == 0 ||
+          strcmp (attr->name, "direction") == 0)
+        value = "<omitted>";
+      else
+        value = attr->value;
+
+      if (name)
+        {
+          /* first time this loop is run */
+          g_string_append_printf (string, "%*s%s: %s: %s\n", depth, "", name, attr->name, value);
+          depth += strlen (name) + 2;
+          name = NULL;
+        }
+      else
+        {
+          /* every other time */
+          g_string_append_printf (string, "%*s%s: %s\n", depth, "", attr->name, value);
+        }
+    }
+
+  atk_attribute_set_free (attributes);
+}
+
+extern GType atk_layer_get_type (void);
+
+static const gchar *
+layer_name (AtkLayer layer)
+{
+  GEnumClass *class;
+  GEnumValue *value;
+
+  class = g_type_class_ref (atk_layer_get_type ());
+  value = g_enum_get_value (class, layer);
+  g_type_class_unref (class);
+
+  return value->value_nick;
+}
+
+static void
+dump_atk_component (AtkComponent *atk_component,
+                    guint         depth,
+                    GString      *string)
+{
+  AtkLayer layer;
+
+  g_string_append_printf (string, "%*s<AtkComponent>\n", depth, "");
+
+  layer = atk_component_get_layer (atk_component);
+  g_string_append_printf (string, "%*slayer: %s\n", depth, "", layer_name (layer));
+
+  g_string_append_printf (string, "%*salpha: %g\n", depth, "", atk_component_get_alpha (atk_component));
+}
+
+static void
+dump_atk_text (AtkText *atk_text,
+               guint    depth,
+               GString *string)
+{
+  gchar *text;
+  gint i, start, end;
+
+  g_string_append_printf (string, "%*s<AtkText>\n", depth, "");
+
+  text = atk_text_get_text (atk_text, 0, -1);
+  g_string_append_printf (string, "%*stext: %s\n", depth, "", text);
+  g_free (text);
+
+  g_string_append_printf (string, "%*scharacter count: %d\n", depth, "", atk_text_get_character_count (atk_text));
+
+  g_string_append_printf (string, "%*scaret offset: %d\n", depth, "", atk_text_get_caret_offset (atk_text));
+
+  for (i = 0; i < atk_text_get_n_selections (atk_text); i++)
+    {
+      text = atk_text_get_selection (atk_text, i, &start, &end);
+      if (text)
+        g_string_append_printf (string, "%*sselection %d: (%d, %d) %s\n", depth, "", i, start, end, text);
+      g_free (text);
+    }
+
+  dump_text_attributes (string, depth, "default attributes", atk_text_get_default_attributes (atk_text));
+}
+
+static void
+dump_atk_image (AtkImage *atk_image,
+                guint     depth,
+                GString  *string)
+{
+  gint width, height;
+
+  g_string_append_printf (string, "%*s<AtkImage>\n", depth, "");
+
+  atk_image_get_image_size (atk_image, &width, &height);
+  g_string_append_printf (string, "%*simage size: %d x %d\n", depth, "", width, height);
+
+  g_string_append_printf (string, "%*simage description: %s\n", depth, "", atk_image_get_image_description (atk_image));
+}
+
+static void
+dump_atk_action (AtkAction *atk_action,
+                 guint      depth,
+                 GString   *string)
+{
+  gint i;
+
+  g_string_append_printf (string, "%*s<AtkAction>\n", depth, "");
+
+  for (i = 0; i < atk_action_get_n_actions (atk_action); i++)
+    {
+      if (atk_action_get_name (atk_action, i))
+        g_string_append_printf (string, "%*saction %d name: %s\n", depth, "", i, atk_action_get_name (atk_action, i));
+      if (atk_action_get_description (atk_action, i))
+        g_string_append_printf (string, "%*saction %d description: %s\n", depth, "", i, atk_action_get_description (atk_action, i));
+      if (atk_action_get_keybinding (atk_action, i))
+        g_string_append_printf (string, "%*saction %d keybinding: %s\n", depth, "", i, atk_action_get_keybinding (atk_action, i));
+    }
+}
+
+static void
+dump_atk_selection (AtkSelection *atk_selection,
+                    guint         depth,
+                    GString      *string)
+{
+  guint n_selections, n_counted_selections;
+  gint i;
+
+  g_string_append_printf (string, "%*s<AtkSelection>\n", depth, "");
+
+  n_selections = atk_selection_get_selection_count (atk_selection);
+
+  n_counted_selections = 0;
+  for (i = 0; i < atk_object_get_n_accessible_children (ATK_OBJECT (atk_selection)); i++)
+    {
+      if (atk_selection_is_child_selected (atk_selection, i))
+        {
+          AtkObject *object = atk_object_ref_accessible_child (ATK_OBJECT (atk_selection), i);
+          
+          g_assert (object);
+          
+          if (n_counted_selections == 0)
+            {
+              g_string_append_printf (string, "%*sselected children: %s\n", depth, "", get_name (object));
+              depth += strlen ("selected children: ");
+            }
+          else
+            g_string_append_printf (string, "%*s%s\n", depth, "", get_name (object));
+          n_counted_selections++;
+        }
+    }
+  
+  g_assert_cmpint (n_selections, ==, n_counted_selections);
+  g_assert_cmpint (n_selections, ==, atk_selection_get_selection_count (atk_selection));
+}
+
+static void
+dump_atk_value (AtkValue *atk_value,
+                guint     depth,
+                GString  *string)
+{
+  GValue value = G_VALUE_INIT;
+  GValue svalue = G_VALUE_INIT;
+
+  g_string_append_printf (string, "%*s<AtkValue>\n", depth, "");
+
+  g_value_init (&value, G_TYPE_DOUBLE);
+  g_value_init (&svalue, G_TYPE_STRING);
+
+  atk_value_get_minimum_value (atk_value, &value);
+  if (g_value_transform (&value, &svalue))
+    g_string_append_printf (string, "%*sminimum value: %s\n", depth, "", g_value_get_string (&svalue));
+  else
+    g_string_append_printf (string, "%*sminimum value: <%s>\n", depth, "", G_VALUE_TYPE_NAME (&value));
+
+  g_value_reset (&value);
+  g_value_reset (&svalue);
+
+  atk_value_get_maximum_value (atk_value, &value);
+  if (g_value_transform (&value, &svalue))
+    g_string_append_printf (string, "%*smaximum value: %s\n", depth, "", g_value_get_string (&svalue));
+  else
+    g_string_append_printf (string, "%*smaximum value: <%s>\n", depth, "", G_VALUE_TYPE_NAME (&value));
+
+  g_value_reset (&value);
+  g_value_reset (&svalue);
+
+  atk_value_get_current_value (atk_value, &value);
+  if (g_value_transform (&value, &svalue))
+    g_string_append_printf (string, "%*scurrent value: %s\n", depth, "", g_value_get_string (&svalue));
+  else
+    g_string_append_printf (string, "%*scurrent value: %s\n", depth, "", G_VALUE_TYPE_NAME (&value));
+
+  g_value_reset (&value);
+  g_value_reset (&svalue);
+
+  atk_value_get_minimum_increment (atk_value, &value);
+  if (g_value_transform (&value, &svalue))
+    g_string_append_printf (string, "%*sminimum increment: %s\n", depth, "", g_value_get_string (&svalue));
+  else
+    g_string_append_printf (string, "%*sminimum increment: %s\n", depth, "", G_VALUE_TYPE_NAME (&value));
+
+  g_value_reset (&value);
+  g_value_reset (&svalue);
+}
+
+static void
+dump_atk_hyperlink_impl (AtkHyperlinkImpl *impl,
+                         guint             depth,
+                         GString          *string)
+{
+  AtkHyperlink *atk_link;
+  gint i;
+
+  g_string_append_printf (string, "%*s<AtkHyperlinkImpl>\n", depth, "");
+
+  atk_link = atk_hyperlink_impl_get_hyperlink (impl);
+
+  g_string_append_printf (string, "%*sanchors:", depth, "");
+
+  for (i = 0; i < atk_hyperlink_get_n_anchors (atk_link); i++)
+    {
+      gchar *uri;
+
+      uri = atk_hyperlink_get_uri (atk_link, i);
+      g_string_append_printf (string, " %s", uri);
+      g_free (uri);
+    }
+  g_string_append_c (string, '\n');
+
+  g_object_unref (atk_link);
+}
+
+static void
+dump_atk_streamable_content (AtkStreamableContent *content,
+                             guint                 depth,
+                             GString              *string)
+{
+  gint i;
+
+  g_string_append_printf (string, "%*s<AtkStreamableContent>\n", depth, "");
+
+  g_string_append_printf (string, "%*smime types:", depth, "");
+  for (i = 0; i < atk_streamable_content_get_n_mime_types (content); i++)
+    g_string_append_printf (string, " %s", atk_streamable_content_get_mime_type (content, i));
+  g_string_append_c (string, '\n');
+}
+
+static void
+dump_atk_table (AtkTable *table,
+                guint     depth,
+                GString  *string)
+{
+  gint *selected;
+  gint n_selected;
+  gint i, j;
+  AtkObject *obj;
+  const gchar *desc;
+
+  g_string_append_printf (string, "%*s<AtkTable>\n", depth, "");
+
+  obj = atk_table_get_summary (table);
+  if (obj)
+    g_string_append_printf (string, "%*ssummary: %s\n", depth, "", get_name (obj));
+
+  obj = atk_table_get_caption (table);
+  if (obj)
+    g_string_append_printf (string, "%*scaption: %s\n", depth, "", get_name (obj));
+
+  g_string_append_printf (string, "%*srows: %d\n", depth, "", atk_table_get_n_rows (table));
+  g_string_append_printf (string, "%*scolumns: %d\n", depth, "", atk_table_get_n_columns (table));
+
+  selected = NULL;
+  n_selected = atk_table_get_selected_rows (table, &selected);
+  if (n_selected > 0)
+    {
+      g_string_append_printf (string, "%*sselected rows:", depth, "");
+      for (i = 0; i < n_selected; i++)
+        g_string_append_printf (string, " %d", selected[i]);
+      g_string_append_c (string, '\n');
+    }
+  g_free (selected);
+
+  selected = NULL;
+  n_selected = atk_table_get_selected_columns (table, &selected);
+  if (n_selected > 0)
+    {
+      g_string_append_printf (string, "%*sselected columns:", depth, "");
+      for (i = 0; i < n_selected; i++)
+        g_string_append_printf (string, " %d", selected[i]);
+      g_string_append_c (string, '\n');
+    }
+  g_free (selected);
+
+  
+  for (i = 0; i < atk_table_get_n_columns (table); i++)
+    {
+      desc = atk_table_get_column_description (table, i);
+      if (desc)
+        g_string_append_printf (string, "%*scolumn %d description: %s\n", depth, "", i, desc);
+      obj = atk_table_get_column_header (table, i);
+      if (obj)
+        g_string_append_printf (string, "%*scolumn %d header: %s\n", depth, "", i, get_name (obj));
+    }
+
+  for (i = 0; i < atk_table_get_n_rows (table); i++)
+    {
+      desc = atk_table_get_row_description (table, i);
+      if (desc)
+        g_string_append_printf (string, "%*srow %d description: %s\n", depth, "", i, desc);
+      obj = atk_table_get_row_header (table, i);
+      if (obj)
+        g_string_append_printf (string, "%*srow %d header: %s\n", depth, "", i, get_name (obj));
+    }
+
+  g_string_append_printf (string, "%*stable indexes:\n", depth, "");
+  for (i = 0; i < atk_table_get_n_rows (table); i++)
+    {
+      g_string_append_printf (string, "%*s", depth + DEPTH_INCREMENT, "");
+      for (j = 0; j < atk_table_get_n_columns (table); j++)
+        {
+          int id = atk_table_get_index_at (table, i, j);
+
+          obj = atk_object_ref_accessible_child (ATK_OBJECT (table), id);
+          if (j > 0)
+            g_string_append (string, " ");
+
+          g_string_append_printf (string, "%s%s%s",
+                                  atk_table_get_row_at_index (table, id) == i ? "✓" : "⚠",
+                                  atk_table_get_column_at_index (table, id) == j ? "✓" : "⚠",
+                                  get_name (obj));
+        }
+      g_string_append (string, "\n");
+    }
+}
+
+static void
+dump_accessible (AtkObject     *accessible,
+                 guint          depth,
+                 GString       *string)
+{
+  guint i;
+
+  g_string_append_printf (string, "%*s%s\n", depth, "", get_name (accessible));
+  depth += DEPTH_INCREMENT;
+
+  g_string_append_printf (string, "%*s\"%s\"\n", depth, "", atk_role_get_name (atk_object_get_role (accessible)));
+  if (GTK_IS_ACCESSIBLE (atk_object_get_parent (accessible)))
+    g_string_append_printf (string, "%*sparent: %s\n", depth, "", get_name (atk_object_get_parent (accessible)));
+  if (atk_object_get_index_in_parent (accessible) != -1)
+    g_string_append_printf (string, "%*sindex: %d\n", depth, "", atk_object_get_index_in_parent (accessible));
+  if (atk_object_get_name (accessible))
+    g_string_append_printf (string, "%*sname: %s\n", depth, "", atk_object_get_name (accessible));
+  if (atk_object_get_description (accessible))
+    g_string_append_printf (string, "%*sdescription: %s\n", depth, "", atk_object_get_description (accessible));
+  dump_relation_set (string, depth, atk_object_ref_relation_set (accessible));
+  dump_state_set (string, depth, atk_object_ref_state_set (accessible));
+  dump_attribute_set (string, depth, atk_object_get_attributes (accessible));
+
+  if (ATK_IS_COMPONENT (accessible))
+    dump_atk_component (ATK_COMPONENT (accessible), depth, string);
+
+  if (ATK_IS_TEXT (accessible))
+    dump_atk_text (ATK_TEXT (accessible), depth, string);
+
+  if (ATK_IS_IMAGE (accessible))
+    dump_atk_image (ATK_IMAGE (accessible), depth, string);
+
+  if (ATK_IS_ACTION (accessible))
+    dump_atk_action (ATK_ACTION (accessible), depth, string);
+
+  if (ATK_IS_SELECTION (accessible))
+    dump_atk_selection (ATK_SELECTION (accessible), depth, string);
+
+  if (ATK_IS_VALUE (accessible))
+    dump_atk_value (ATK_VALUE (accessible), depth, string);
+
+  if (ATK_IS_HYPERLINK_IMPL (accessible))
+    dump_atk_hyperlink_impl (ATK_HYPERLINK_IMPL (accessible), depth, string);
+
+  if (ATK_IS_STREAMABLE_CONTENT (accessible))
+    dump_atk_streamable_content (ATK_STREAMABLE_CONTENT (accessible), depth, string);
+
+  if (ATK_IS_TABLE (accessible))
+    dump_atk_table (ATK_TABLE (accessible), depth, string);
+
+  for (i = 0; i < atk_object_get_n_accessible_children (accessible); i++)
+    {
+      AtkObject *child = atk_object_ref_accessible_child (accessible, i);
+      dump_accessible (child, depth, string);
+      g_object_unref (child);
+    }
+}
+
+static GtkWidget *
+builder_get_toplevel (GtkBuilder *builder)
+{
+  GSList *list, *walk;
+  GtkWidget *window = NULL;
+
+  list = gtk_builder_get_objects (builder);
+  for (walk = list; walk; walk = walk->next)
+    {
+      if (GTK_IS_WINDOW (walk->data) &&
+          gtk_widget_get_parent (walk->data) == NULL)
+        {
+          window = walk->data;
+          break;
+        }
+    }
+  
+  g_slist_free (list);
+
+  return window;
+}
+
+static void
+dump_ui_file (const char *ui_file,
+              GString *string)
+{
+  GtkWidget *window;
+  GtkBuilder *builder;
+  GError *error = NULL;
+
+  builder = gtk_builder_new ();
+  gtk_builder_add_from_file (builder, ui_file, &error);
+  g_assert_no_error (error);
+  window = builder_get_toplevel (builder);
+  g_object_unref (builder);
+  g_assert (window);
+
+  gtk_widget_show (window);
+
+  dump_accessible (gtk_widget_get_accessible (window), 0, string);
+  gtk_widget_destroy (window);
+}
+
+static void
+dump_to_stdout (GFile *file)
+{
+  char *ui_file;
+  GString *dump;
+
+  ui_file = g_file_get_path (file);
+  dump = g_string_new ("");
+
+  dump_ui_file (ui_file, dump);
+  g_print ("%s", dump->str);
+
+  g_string_free (dump, TRUE);
+  g_free (ui_file);
+}
+
+static void
+test_ui_file (GFile *file)
+{
+  char *ui_file, *a11y_file;
+  GString *dump;
+  GError *error = NULL;
+
+  ui_file = g_file_get_path (file);
+  a11y_file = get_test_file (ui_file, ".txt", TRUE);
+  dump = g_string_new ("");
+
+  dump_ui_file (ui_file, dump);
+
+  if (a11y_file)
+    {
+      char *diff = diff_with_file (a11y_file, dump->str, dump->len, &error);
+      g_assert_no_error (error);
+
+      if (diff && diff[0])
+        {
+          g_test_message ("Contents don't match expected contents:\n%s", diff);
+          g_test_fail ();
+          g_free (diff);
+        }
+    }
+  else if (dump->str[0])
+    {
+      g_test_message ("Expected a reference file:\n%s", dump->str);
+      g_test_fail ();
+    }
+
+  g_string_free (dump, TRUE);
+  g_free (a11y_file);
+  g_free (ui_file);
+}
+
+static void
+add_test_for_file (GFile *file)
+{
+  g_test_add_vtable (g_file_get_path (file),
+                     0,
+                     g_object_ref (file),
+                     (GTestFixtureFunc) setup_test,
+                     (GTestFixtureFunc) test_ui_file,
+                     (GTestFixtureFunc) g_object_unref);
+}
+
+static int
+compare_files (gconstpointer a, gconstpointer b)
+{
+  GFile *file1 = G_FILE (a);
+  GFile *file2 = G_FILE (b);
+  char *path1, *path2;
+  int result;
+
+  path1 = g_file_get_path (file1);
+  path2 = g_file_get_path (file2);
+
+  result = strcmp (path1, path2);
+
+  g_free (path1);
+  g_free (path2);
+
+  return result;
+}
+
+static void
+add_tests_for_files_in_directory (GFile *dir)
+{
+  GFileEnumerator *enumerator;
+  GFileInfo *info;
+  GList *files;
+  GError *error = NULL;
+
+  enumerator = g_file_enumerate_children (dir, G_FILE_ATTRIBUTE_STANDARD_NAME, 0, NULL, &error);
+  g_assert_no_error (error);
+  files = NULL;
+
+  while ((info = g_file_enumerator_next_file (enumerator, NULL, &error)))
+    {
+      const char *filename;
+
+      filename = g_file_info_get_name (info);
+
+      if (!g_str_has_suffix (filename, ".ui"))
+        {
+          g_object_unref (info);
+          continue;
+        }
+
+      files = g_list_prepend (files, g_file_get_child (dir, filename));
+
+      g_object_unref (info);
+    }
+  
+  g_assert_no_error (error);
+  g_object_unref (enumerator);
+
+  files = g_list_sort (files, compare_files);
+  g_list_foreach (files, (GFunc) add_test_for_file, NULL);
+  g_list_free_full (files, g_object_unref);
+}
+
+static char *arg_base_dir = NULL;
+
+static const GOptionEntry test_args[] = {
+  { "directory",        'd', 0, G_OPTION_ARG_FILENAME, &arg_base_dir,
+    "Directory to run tests from", "DIR" },
+  { NULL }
+};
+
+static gboolean
+parse_command_line (int *argc, char ***argv)
+{
+  GError *error = NULL;
+  GOptionContext *context;
+
+  context = g_option_context_new ("- run GTK accessibility tests");
+  g_option_context_add_main_entries (context, test_args, NULL);
+  g_option_context_set_ignore_unknown_options (context, TRUE);
+
+  if (!g_option_context_parse (context, argc, argv, &error))
+    {
+      g_print ("option parsing failed: %s\n", error->message);
+      return FALSE;
+    }
+
+  gtk_test_init (argc, argv);
+
+  return TRUE;
+}
+
+int
+main (int argc, char **argv)
+{
+  if (!parse_command_line (&argc, &argv))
+    return 1;
+
+  if (argc < 2)
+    {
+      const char *basedir;
+      GFile *dir;
+
+      if (arg_base_dir)
+        basedir = arg_base_dir;
+      else if (g_getenv ("srcdir"))
+        basedir = g_getenv ("srcdir");
+      else
+        basedir = ".";
+        
+      dir = g_file_new_for_path (basedir);
+      
+      add_tests_for_files_in_directory (dir);
+
+      g_object_unref (dir);
+    }
+  else if (argc == 3 && strcmp (argv[1], "--generate") == 0)
+    {
+      GFile *file = g_file_new_for_commandline_arg (argv[2]);
+
+      dump_to_stdout (file);
+
+      g_object_unref (file);
+
+      return 0;
+    }
+  else
+    {
+      guint i;
+
+      for (i = 1; i < argc; i++)
+        {
+          GFile *file = g_file_new_for_commandline_arg (argv[i]);
+
+          add_test_for_file (file);
+
+          g_object_unref (file);
+        }
+    }
+
+  return g_test_run ();
+}
+
diff --git a/testsuite/a11y/accessible-name.txt b/testsuite/a11y/accessible-name.txt
new file mode 100644 (file)
index 0000000..0fbd0aa
--- /dev/null
@@ -0,0 +1,24 @@
+window1
+  "window"
+  index: 0
+  state: enabled resizable sensitive showing visible
+  toolkit: gtk
+  <AtkComponent>
+  layer: window
+  alpha: 1
+  button1
+    "push button"
+    parent: window1
+    index: 0
+    name: Accessible name
+    state: enabled focusable sensitive showing visible
+    toolkit: gtk
+    <AtkComponent>
+    layer: widget
+    alpha: 1
+    <AtkImage>
+    image size: -1 x -1
+    image description: (null)
+    <AtkAction>
+    action 0 name: click
+    action 0 description: Clicks the button
diff --git a/testsuite/a11y/accessible-name.ui b/testsuite/a11y/accessible-name.ui
new file mode 100644 (file)
index 0000000..8fc76d0
--- /dev/null
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+  <!-- interface-requires gtk+ 3.0 -->
+  <object class="GtkWindow" id="window1">
+    <property name="can_focus">False</property>
+    <property name="type">popup</property>
+    <child>
+      <object class="GtkButton" id="button1">
+        <property name="label" translatable="yes">Hello World!</property>
+        <property name="visible">True</property>
+        <property name="can_focus">True</property>
+        <property name="receives_default">True</property>
+        <child internal-child="accessible">
+          <object class="AtkObject" id="button1-accessible">
+            <property name="accessible-name" translatable="yes">Accessible name</property>
+          </object>
+        </child>
+      </object>
+    </child>
+  </object>
+</interface>
diff --git a/testsuite/a11y/assistant.txt b/testsuite/a11y/assistant.txt
new file mode 100644 (file)
index 0000000..13df1ef
--- /dev/null
@@ -0,0 +1,149 @@
+window1
+  "window"
+  index: 0
+  state: enabled resizable sensitive showing visible
+  toolkit: gtk
+  <AtkComponent>
+  layer: window
+  alpha: 1
+  button1
+    "push button"
+    index: 0
+    name: Page 1
+    state: enabled focusable sensitive showing visible
+    toolkit: gtk
+    <AtkComponent>
+    layer: widget
+    alpha: 1
+    <AtkImage>
+    image size: -1 x -1
+    image description: (null)
+    <AtkAction>
+    action 0 name: click
+    action 0 description: Clicks the button
+  button2
+    "push button"
+    index: 0
+    name: Page 2
+    state: enabled focusable sensitive visible
+    toolkit: gtk
+    <AtkComponent>
+    layer: widget
+    alpha: 1
+    <AtkImage>
+    image size: -1 x -1
+    image description: (null)
+    <AtkAction>
+    action 0 name: click
+    action 0 description: Clicks the button
+  action_area
+    "filler"
+    parent: content_box
+    index: 1
+    state: enabled horizontal sensitive showing visible
+    toolkit: gtk
+    <AtkComponent>
+    layer: widget
+    alpha: 1
+    close
+      "push button"
+      parent: action_area
+      index: 0
+      name: Close
+      state: enabled focusable sensitive
+      toolkit: gtk
+      <AtkComponent>
+      layer: widget
+      alpha: 1
+      <AtkImage>
+      image size: 20 x 20
+      image description: (null)
+      <AtkAction>
+      action 0 name: click
+      action 0 description: Clicks the button
+      action 0 keybinding: <Alt>c
+    cancel
+      "push button"
+      parent: action_area
+      index: 1
+      name: Cancel
+      state: enabled focusable sensitive showing visible
+      toolkit: gtk
+      <AtkComponent>
+      layer: widget
+      alpha: 1
+      <AtkImage>
+      image size: 20 x 20
+      image description: (null)
+      <AtkAction>
+      action 0 name: click
+      action 0 description: Clicks the button
+      action 0 keybinding: <Alt>c
+    last
+      "push button"
+      parent: action_area
+      index: 2
+      name: Finish
+      state: focusable
+      toolkit: gtk
+      <AtkComponent>
+      layer: widget
+      alpha: 1
+      <AtkImage>
+      image size: 20 x 20
+      image description: (null)
+      <AtkAction>
+      action 0 name: click
+      action 0 description: Clicks the button
+      action 0 keybinding: <Alt>f
+    back
+      "push button"
+      parent: action_area
+      index: 3
+      name: Go Back
+      state: enabled focusable sensitive
+      toolkit: gtk
+      <AtkComponent>
+      layer: widget
+      alpha: 1
+      <AtkImage>
+      image size: 20 x 20
+      image description: (null)
+      <AtkAction>
+      action 0 name: click
+      action 0 description: Clicks the button
+      action 0 keybinding: <Alt>b
+    forward
+      "push button"
+      parent: action_area
+      index: 4
+      name: Continue
+      state: focusable showing visible
+      toolkit: gtk
+      <AtkComponent>
+      layer: widget
+      alpha: 1
+      <AtkImage>
+      image size: 20 x 20
+      image description: (null)
+      <AtkAction>
+      action 0 name: click
+      action 0 description: Clicks the button
+      action 0 keybinding: <Alt>o
+    apply
+      "push button"
+      parent: action_area
+      index: 5
+      name: Apply
+      state: enabled focusable sensitive
+      toolkit: gtk
+      <AtkComponent>
+      layer: widget
+      alpha: 1
+      <AtkImage>
+      image size: 20 x 20
+      image description: (null)
+      <AtkAction>
+      action 0 name: click
+      action 0 description: Clicks the button
+      action 0 keybinding: <Alt>a
diff --git a/testsuite/a11y/assistant.ui b/testsuite/a11y/assistant.ui
new file mode 100644 (file)
index 0000000..aed2044
--- /dev/null
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+  <!-- interface-requires gtk+ 3.0 -->
+  <object class="GtkAssistant" id="window1">
+    <property name="can_focus">False</property>
+    <property name="type">popup</property>
+    <child>
+      <object class="GtkButton" id="button1">
+        <property name="label" translatable="yes">Button 1</property>
+        <property name="visible">True</property>
+        <property name="can_focus">True</property>
+      </object>
+      <packing>
+        <property name="title" translatable="yes">Page 1</property>
+      </packing>
+    </child>
+    <child>
+      <object class="GtkButton" id="button2">
+        <property name="label" translatable="yes">Button 2</property>
+        <property name="visible">True</property>
+        <property name="can_focus">True</property>
+      </object>
+      <packing>
+        <property name="title" translatable="yes">Page 2</property>
+      </packing>
+    </child>
+  </object>
+</interface>
diff --git a/testsuite/a11y/buttons.txt b/testsuite/a11y/buttons.txt
new file mode 100644 (file)
index 0000000..6b1fd88
--- /dev/null
@@ -0,0 +1,113 @@
+window1
+  "window"
+  index: 0
+  state: enabled resizable sensitive showing visible
+  toolkit: gtk
+  <AtkComponent>
+  layer: window
+  alpha: 1
+  grid1
+    "panel"
+    parent: window1
+    index: 0
+    state: enabled horizontal sensitive showing visible
+    toolkit: gtk
+    <AtkComponent>
+    layer: widget
+    alpha: 1
+    button6
+      "toggle button"
+      parent: grid1
+      index: 0
+      name: Test switch
+      description: Switches between on and off states
+      state: enabled focusable sensitive showing visible
+      toolkit: gtk
+      <AtkComponent>
+      layer: widget
+      alpha: 1
+      <AtkAction>
+      action 0 name: toggle
+      action 0 description: Toggles the switch
+    button5
+      "toggle button"
+      parent: grid1
+      index: 1
+      name: Switch
+      description: Switches between on and off states
+      state: checked enabled focusable sensitive showing visible
+      toolkit: gtk
+      <AtkComponent>
+      layer: widget
+      alpha: 1
+      <AtkAction>
+      action 0 name: toggle
+      action 0 description: Toggles the switch
+    button4
+      "radio button"
+      parent: grid1
+      index: 2
+      name: Hello World!
+      member-of: button4
+                 button3
+      state: enabled focusable sensitive showing visible
+      toolkit: gtk
+      <AtkComponent>
+      layer: widget
+      alpha: 1
+      <AtkImage>
+      image size: -1 x -1
+      image description: (null)
+      <AtkAction>
+      action 0 name: click
+      action 0 description: Clicks the button
+    button3
+      "radio button"
+      parent: grid1
+      index: 3
+      name: Hello World!
+      member-of: button4
+                 button3
+      state: armed checked enabled focusable sensitive showing visible
+      toolkit: gtk
+      <AtkComponent>
+      layer: widget
+      alpha: 1
+      <AtkImage>
+      image size: -1 x -1
+      image description: (null)
+      <AtkAction>
+      action 0 name: click
+      action 0 description: Clicks the button
+    button2
+      "check box"
+      parent: grid1
+      index: 4
+      name: Hello World!
+      state: enabled focusable sensitive showing visible
+      toolkit: gtk
+      <AtkComponent>
+      layer: widget
+      alpha: 1
+      <AtkImage>
+      image size: -1 x -1
+      image description: (null)
+      <AtkAction>
+      action 0 name: click
+      action 0 description: Clicks the button
+    button1
+      "toggle button"
+      parent: grid1
+      index: 5
+      name: Hello World!
+      state: armed checked enabled focusable sensitive showing visible
+      toolkit: gtk
+      <AtkComponent>
+      layer: widget
+      alpha: 1
+      <AtkImage>
+      image size: -1 x -1
+      image description: (null)
+      <AtkAction>
+      action 0 name: click
+      action 0 description: Clicks the button
diff --git a/testsuite/a11y/buttons.ui b/testsuite/a11y/buttons.ui
new file mode 100644 (file)
index 0000000..b229bbb
--- /dev/null
@@ -0,0 +1,95 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+  <!-- interface-requires gtk+ 3.0 -->
+  <object class="GtkWindow" id="window1">
+    <property name="can_focus">False</property>
+    <property name="type">popup</property>
+    <child>
+      <object class="GtkGrid" id="grid1">
+        <property name="visible">True</property>
+        <child>
+          <object class="GtkToggleButton" id="button1">
+            <property name="label" translatable="yes">Hello World!</property>
+            <property name="visible">True</property>
+            <property name="active">True</property>
+            <property name="can_focus">True</property>
+            <property name="receives_default">True</property>
+          </object>
+          <packing>
+            <property name="left_attach">0</property>
+            <property name="top_attach">0</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkCheckButton" id="button2">
+            <property name="label" translatable="yes">Hello World!</property>
+            <property name="visible">True</property>
+            <property name="active">False</property>
+            <property name="can_focus">True</property>
+            <property name="receives_default">True</property>
+          </object>
+          <packing>
+            <property name="left_attach">1</property>
+            <property name="top_attach">0</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkRadioButton" id="button3">
+            <property name="label" translatable="yes">Hello World!</property>
+            <property name="visible">True</property>
+            <property name="active">False</property>
+            <property name="can_focus">True</property>
+            <property name="receives_default">True</property>
+          </object>
+          <packing>
+            <property name="left_attach">2</property>
+            <property name="top_attach">0</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkRadioButton" id="button4">
+            <property name="label" translatable="yes">Hello World!</property>
+            <property name="visible">True</property>
+            <property name="active">True</property>
+            <property name="group">button3</property>
+            <property name="can_focus">True</property>
+            <property name="receives_default">True</property>
+          </object>
+          <packing>
+            <property name="left_attach">3</property>
+            <property name="top_attach">0</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkSwitch" id="button5">
+            <property name="visible">True</property>
+            <property name="active">True</property>
+            <property name="can_focus">True</property>
+            <property name="receives_default">True</property>
+          </object>
+          <packing>
+            <property name="left_attach">4</property>
+            <property name="top_attach">0</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkSwitch" id="button6">
+            <property name="visible">True</property>
+            <property name="active">False</property>
+            <property name="can_focus">True</property>
+            <property name="receives_default">True</property>
+            <child internal-child="accessible">
+              <object class="AtkObject" id="button6-accessible">
+                <property name="accessible-name">Test switch</property>
+              </object>
+            </child>
+          </object>
+          <packing>
+            <property name="left_attach">5</property>
+            <property name="top_attach">0</property>
+          </packing>
+        </child>
+      </object>
+    </child>
+  </object>
+</interface>
diff --git a/testsuite/a11y/calendar.txt b/testsuite/a11y/calendar.txt
new file mode 100644 (file)
index 0000000..06985b9
--- /dev/null
@@ -0,0 +1,17 @@
+window1
+  "window"
+  index: 0
+  state: enabled resizable sensitive showing visible
+  toolkit: gtk
+  <AtkComponent>
+  layer: window
+  alpha: 1
+  calendar1
+    "calendar"
+    parent: window1
+    index: 0
+    state: enabled focusable sensitive showing visible
+    toolkit: gtk
+    <AtkComponent>
+    layer: widget
+    alpha: 1
diff --git a/testsuite/a11y/calendar.ui b/testsuite/a11y/calendar.ui
new file mode 100644 (file)
index 0000000..f4562c4
--- /dev/null
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+  <!-- interface-requires gtk+ 3.0 -->
+  <object class="GtkWindow" id="window1">
+    <property name="can_focus">False</property>
+    <property name="type">popup</property>
+    <child>
+      <object class="GtkCalendar" id="calendar1">
+        <property name="visible">True</property>
+        <property name="day">1</property>
+        <property name="month">2</property>
+        <property name="year">1970</property>
+      </object>
+    </child>
+  </object>
+</interface>
diff --git a/testsuite/a11y/children.c b/testsuite/a11y/children.c
new file mode 100644 (file)
index 0000000..a2d847e
--- /dev/null
@@ -0,0 +1,269 @@
+/*
+ * Copyright (C) 2011 Red Hat Inc.
+ *
+ * Author:
+ *      Matthias Clasen <mclasen@redhat.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#define GDK_DISABLE_DEPRECATION_WARNINGS
+#undef GTK_DISABLE_DEPRECATED
+
+#include <gtk/gtk.h>
+#include <string.h>
+
+typedef struct
+{
+  GtkWidget *widget;
+  gpointer child[3];
+} STATE;
+
+static void
+test_scrolled_window_child_count (void)
+{
+  GtkWidget *sw;
+  AtkObject *accessible;
+
+  sw = gtk_scrolled_window_new (NULL, NULL);
+  g_object_ref_sink (sw);
+  gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw),
+                                  GTK_POLICY_ALWAYS, GTK_POLICY_ALWAYS);
+  gtk_container_add (GTK_CONTAINER (sw), gtk_label_new ("Bla"));
+
+  accessible = gtk_widget_get_accessible (sw);
+  g_assert_cmpint (atk_object_get_n_accessible_children (accessible), ==, 3);
+
+  g_object_unref (sw);
+}
+
+typedef struct {
+  gint count;
+  gint index;
+  gint n_children;
+  gpointer parent;
+} SignalData;
+
+static void
+children_changed (AtkObject  *accessible,
+                  guint       index,
+                  gpointer    child,
+                  SignalData *data)
+{
+  data->count++;
+  data->index = index;
+  data->n_children = atk_object_get_n_accessible_children (accessible);
+}
+
+static void
+remove_child (STATE *state,
+              gint i)
+{
+  GtkWidget *child;
+
+  if (GTK_IS_ENTRY (state->widget))
+    {
+      switch (i)
+        {
+        case 0:
+          gtk_entry_set_icon_from_gicon (GTK_ENTRY (state->widget),
+                                         GTK_ENTRY_ICON_PRIMARY,
+                                         NULL);
+        return;
+        case 1:
+          gtk_entry_set_icon_from_gicon (GTK_ENTRY (state->widget),
+                                         GTK_ENTRY_ICON_SECONDARY,
+                                         NULL);
+        return;
+        default:
+          return;
+        }
+    }
+
+  child = state->child [i];
+  if (GTK_IS_SCROLLED_WINDOW (state->widget))
+    {
+      if (gtk_widget_get_parent (child) != state->widget)
+        child = gtk_widget_get_parent (child);
+    }
+
+  gtk_container_remove (GTK_CONTAINER (state->widget), child);
+}
+
+static void
+parent_notify (AtkObject *obj, GParamSpec *pspec, SignalData *data)
+{
+  data->count++;
+  data->parent = atk_object_get_parent (obj);
+}
+
+gboolean
+do_create_child (STATE *state, gint i)
+{
+  if (GTK_IS_ENTRY (state->widget))
+    {
+      switch (i)
+        {
+        case 0:
+          gtk_entry_set_icon_from_stock (GTK_ENTRY (state->widget),
+                                         GTK_ENTRY_ICON_PRIMARY,
+                                         GTK_STOCK_CAPS_LOCK_WARNING);
+        return TRUE;
+        case 1:
+          gtk_entry_set_icon_from_stock (GTK_ENTRY (state->widget),
+                                         GTK_ENTRY_ICON_SECONDARY,
+                                         GTK_STOCK_CLEAR);
+        return TRUE;
+        default:
+          return FALSE;
+        }
+    }
+  else if (gtk_container_child_type (GTK_CONTAINER (state->widget)) == G_TYPE_NONE)
+    return FALSE;
+
+  state->child[i] = gtk_label_new ("bla");
+  return TRUE;
+}
+
+static void
+test_add_remove (GtkWidget *widget)
+{
+  AtkObject *accessible;
+  AtkObject *child_accessible;
+  SignalData add_data;
+  SignalData remove_data;
+  SignalData parent_data[3];
+  STATE state;
+  gint i, j;
+  gint step_children;
+
+  state.widget = widget;
+  accessible = gtk_widget_get_accessible (widget);
+
+  add_data.count = 0;
+  remove_data.count = 0;
+  g_signal_connect (accessible, "children_changed::add",
+                    G_CALLBACK (children_changed), &add_data);
+  g_signal_connect (accessible, "children_changed::remove",
+                    G_CALLBACK (children_changed), &remove_data);
+
+  step_children = atk_object_get_n_accessible_children (accessible);
+
+  for (i = 0; i < 3; i++)
+    {
+      if (!do_create_child (&state, i))
+        break;
+      if (!GTK_IS_ENTRY (widget))
+        {
+          parent_data[i].count = 0;
+          child_accessible = gtk_widget_get_accessible (state.child[i]);
+          g_signal_connect (child_accessible, "notify::accessible-parent",
+                            G_CALLBACK (parent_notify), &(parent_data[i]));
+          gtk_container_add (GTK_CONTAINER (widget), state.child[i]);
+        }
+      else
+        child_accessible = atk_object_ref_accessible_child (accessible, i);
+
+      g_assert_cmpint (add_data.count, ==, i + 1);
+      g_assert_cmpint (add_data.n_children, ==, step_children + i + 1);
+      g_assert_cmpint (remove_data.count, ==, 0);
+      if (!GTK_IS_ENTRY (widget))
+        g_assert_cmpint (parent_data[i].count, ==, 1);
+      if (GTK_IS_SCROLLED_WINDOW (widget) ||
+          GTK_IS_NOTEBOOK (widget))
+        g_assert (atk_object_get_parent (ATK_OBJECT (parent_data[i].parent)) == accessible);
+      else if (GTK_IS_ENTRY (widget))
+        g_assert (atk_object_get_parent (child_accessible) == accessible);
+      else
+        g_assert (parent_data[i].parent == accessible);
+
+      if (GTK_IS_ENTRY (widget))
+        g_object_unref (child_accessible);
+    }
+  for (j = 0 ; j < i; j++)
+    {
+      remove_child (&state, j);
+      g_assert_cmpint (add_data.count, ==, i);
+      g_assert_cmpint (remove_data.count, ==, j + 1);
+      g_assert_cmpint (remove_data.n_children, ==, step_children + i - j - 1);
+      if (parent_data[j].count == 2)
+        g_assert (parent_data[j].parent == NULL);
+      else if (!GTK_IS_ENTRY (widget))
+        {
+          AtkStateSet *set;
+          set = atk_object_ref_state_set (ATK_OBJECT (parent_data[j].parent));
+          g_assert (atk_state_set_contains_state (set, ATK_STATE_DEFUNCT));
+          g_object_unref (set);
+        }
+    }
+
+  g_signal_handlers_disconnect_by_func (accessible, G_CALLBACK (children_changed), &add_data);
+  g_signal_handlers_disconnect_by_func (accessible, G_CALLBACK (children_changed), &remove_data);
+}
+
+static void
+add_child_test (const gchar      *prefix,
+                GTestFixtureFunc  test_func,
+                GtkWidget        *widget)
+{
+  gchar *path;
+
+  path = g_strdup_printf ("%s/%s", prefix, G_OBJECT_TYPE_NAME (widget));
+  g_test_add_vtable (path,
+                     0,
+                     g_object_ref (widget),
+                     0,
+                     (GTestFixtureFunc) test_func,
+                     (GTestFixtureFunc) g_object_unref);
+  g_free (path);
+}
+
+static void
+add_child_tests (GtkWidget *widget)
+{
+  g_object_ref_sink (widget);
+  add_child_test ("/child/add-remove", (GTestFixtureFunc)test_add_remove, widget);
+  g_object_unref (widget);
+}
+
+int
+main (int argc, char *argv[])
+{
+  gtk_test_init (&argc, &argv, NULL);
+
+  g_test_add_func ("/scrolledwindow/child-count", test_scrolled_window_child_count);
+
+  add_child_tests (gtk_scrolled_window_new (NULL, NULL));
+  add_child_tests (gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0));
+  add_child_tests (gtk_paned_new (GTK_ORIENTATION_HORIZONTAL));
+  add_child_tests (gtk_grid_new ());
+  add_child_tests (gtk_event_box_new ());
+  add_child_tests (gtk_window_new (GTK_WINDOW_TOPLEVEL));
+  add_child_tests (gtk_assistant_new ());
+  add_child_tests (gtk_frame_new ("frame"));
+  add_child_tests (gtk_expander_new ("expander"));
+  add_child_tests (gtk_table_new (2, 2, FALSE));
+  add_child_tests (gtk_text_view_new ());
+  add_child_tests (gtk_tree_view_new ());
+#if 0
+  /* gail doesn't handle non-label children in these */
+  add_child_tests (gtk_button_new ());
+  add_child_tests (gtk_statusbar_new ());
+#endif
+  add_child_tests (gtk_notebook_new ());
+  add_child_tests (gtk_entry_new ());
+
+  return g_test_run ();
+}
+
diff --git a/testsuite/a11y/colorchooser.txt b/testsuite/a11y/colorchooser.txt
new file mode 100644 (file)
index 0000000..1db200d
--- /dev/null
@@ -0,0 +1,1373 @@
+window1
+  "color chooser"
+  index: 0
+  name: Color Selection
+  state: enabled resizable sensitive showing visible
+  toolkit: gtk
+  <AtkComponent>
+  layer: window
+  alpha: 1
+  vbox
+    "filler"
+    parent: window1
+    index: 0
+    state: enabled sensitive showing vertical visible
+    toolkit: gtk
+    <AtkComponent>
+    layer: widget
+    alpha: 1
+    unnamed-GtkContainerAccessible-0
+      "color chooser"
+      parent: vbox
+      index: 0
+      state: enabled sensitive showing vertical visible
+      toolkit: gtk
+      <AtkComponent>
+      layer: widget
+      alpha: 1
+      unnamed-GtkContainerAccessible-1
+        "filler"
+        parent: unnamed-GtkContainerAccessible-0
+        index: 0
+        state: enabled horizontal sensitive showing visible
+        toolkit: gtk
+        <AtkComponent>
+        layer: widget
+        alpha: 1
+        unnamed-GtkContainerAccessible-2
+          "filler"
+          parent: unnamed-GtkContainerAccessible-1
+          index: 0
+          state: enabled sensitive showing vertical visible
+          toolkit: gtk
+          <AtkComponent>
+          layer: widget
+          alpha: 1
+          unnamed-GtkWidgetAccessible-3
+            "color chooser"
+            parent: unnamed-GtkContainerAccessible-2
+            index: 0
+            name: Color Wheel
+            description: Select the color you want from the outer ring. Select the darkness or lightness of that color using the inner triangle.
+            controlled-by: 0
+                           0
+                           100
+                           255
+                           255
+                           255
+            state: enabled focusable sensitive showing visible
+            toolkit: gtk
+            <AtkComponent>
+            layer: widget
+            alpha: 1
+          unnamed-GtkContainerAccessible-4
+            "filler"
+            parent: unnamed-GtkContainerAccessible-2
+            index: 1
+            state: enabled horizontal sensitive showing visible
+            toolkit: gtk
+            <AtkComponent>
+            layer: widget
+            alpha: 1
+            unnamed-GtkFrameAccessible-5
+              "panel"
+              parent: unnamed-GtkContainerAccessible-4
+              index: 0
+              state: enabled sensitive showing visible
+              toolkit: gtk
+              <AtkComponent>
+              layer: widget
+              alpha: 1
+              unnamed-GtkContainerAccessible-6
+                "filler"
+                parent: unnamed-GtkFrameAccessible-5
+                index: 0
+                state: enabled horizontal sensitive showing visible
+                toolkit: gtk
+                <AtkComponent>
+                layer: widget
+                alpha: 1
+                unnamed-GtkWidgetAccessible-7
+                  "unknown"
+                  parent: unnamed-GtkContainerAccessible-6
+                  index: 0
+                  description: The previously-selected color, for comparison to the color you're selecting now.
+                  state: enabled sensitive showing visible
+                  toolkit: gtk
+                  <AtkComponent>
+                  layer: widget
+                  alpha: 1
+                unnamed-GtkWidgetAccessible-8
+                  "unknown"
+                  parent: unnamed-GtkContainerAccessible-6
+                  index: 1
+                  description: The color you've chosen.
+                  state: enabled sensitive showing visible
+                  toolkit: gtk
+                  <AtkComponent>
+                  layer: widget
+                  alpha: 1
+            unnamed-GtkButtonAccessible-9
+              "push button"
+              parent: unnamed-GtkContainerAccessible-4
+              index: 1
+              description: Click the eyedropper, then click a color anywhere on your screen to select that color.
+              state: enabled focusable sensitive showing visible
+              toolkit: gtk
+              <AtkComponent>
+              layer: widget
+              alpha: 1
+              <AtkImage>
+              image size: -1 x -1
+              image description: (null)
+              <AtkAction>
+              action 0 name: click
+              action 0 description: Clicks the button
+        unnamed-GtkContainerAccessible-10
+          "filler"
+          parent: unnamed-GtkContainerAccessible-1
+          index: 1
+          state: enabled sensitive showing vertical visible
+          toolkit: gtk
+          <AtkComponent>
+          layer: widget
+          alpha: 1
+          unnamed-GtkContainerAccessible-11
+            "panel"
+            parent: unnamed-GtkContainerAccessible-10
+            index: 0
+            state: enabled horizontal sensitive showing visible
+            toolkit: gtk
+            <AtkComponent>
+            layer: widget
+            alpha: 1
+            #FFFFFF
+              "text"
+              parent: unnamed-GtkContainerAccessible-11
+              index: 0
+              description: You can enter an HTML-style hexadecimal color value, or simply a color name such as 'orange' in this entry.
+              labelled-by: Color name:
+              state: editable enabled focusable sensitive showing single-line visible
+              toolkit: gtk
+              <AtkComponent>
+              layer: widget
+              alpha: 1
+              <AtkText>
+              text: #FFFFFF
+              character count: 7
+              caret offset: 0
+              default attributes: bg-color: <omitted>
+                                  bg-full-height: 0
+                                  direction: <omitted>
+                                  editable: false
+                                  family-name: <omitted>
+                                  fg-color: <omitted>
+                                  indent: 0
+                                  invisible: false
+                                  justification: left
+                                  language: <omitted>
+                                  left-margin: 0
+                                  pixels-above-lines: 0
+                                  pixels-below-lines: 0
+                                  pixels-inside-wrap: 0
+                                  right-margin: 0
+                                  rise: 0
+                                  scale: 1
+                                  size: <omitted>
+                                  stretch: <omitted>
+                                  strikethrough: false
+                                  style: <omitted>
+                                  underline: none
+                                  variant: <omitted>
+                                  weight: <omitted>
+                                  wrap-mode: word
+              <AtkAction>
+              action 0 name: activate
+              action 0 description: Activates the entry
+              action 0 keybinding: <Alt>n
+            Color name:
+              "label"
+              parent: unnamed-GtkContainerAccessible-11
+              index: 1
+              name: Color name:
+              label-for: #FFFFFF
+              state: enabled multi-line sensitive showing visible
+              toolkit: gtk
+              <AtkComponent>
+              layer: widget
+              alpha: 1
+              <AtkText>
+              text: Color name:
+              character count: 11
+              caret offset: 0
+              default attributes: bg-color: <omitted>
+                                  bg-full-height: 0
+                                  direction: <omitted>
+                                  editable: false
+                                  family-name: <omitted>
+                                  fg-color: <omitted>
+                                  indent: 0
+                                  invisible: false
+                                  justification: left
+                                  language: <omitted>
+                                  left-margin: 0
+                                  pixels-above-lines: 0
+                                  pixels-below-lines: 0
+                                  pixels-inside-wrap: 0
+                                  right-margin: 0
+                                  rise: 0
+                                  scale: 1
+                                  size: <omitted>
+                                  stretch: <omitted>
+                                  strikethrough: false
+                                  style: <omitted>
+                                  underline: none
+                                  variant: <omitted>
+                                  weight: <omitted>
+                                  wrap-mode: word
+            255
+              "text"
+              parent: unnamed-GtkContainerAccessible-11
+              index: 2
+              description: Transparency of the color.
+              state: editable enabled focusable sensitive single-line
+              toolkit: gtk
+              <AtkComponent>
+              layer: widget
+              alpha: 1
+              <AtkText>
+              text: 255
+              character count: 3
+              caret offset: 0
+              default attributes: bg-color: <omitted>
+                                  bg-full-height: 0
+                                  direction: <omitted>
+                                  editable: false
+                                  family-name: <omitted>
+                                  fg-color: <omitted>
+                                  indent: 0
+                                  invisible: false
+                                  justification: left
+                                  language: <omitted>
+                                  left-margin: 0
+                                  pixels-above-lines: 0
+                                  pixels-below-lines: 0
+                                  pixels-inside-wrap: 0
+                                  right-margin: 0
+                                  rise: 0
+                                  scale: 1
+                                  size: <omitted>
+                                  stretch: <omitted>
+                                  strikethrough: false
+                                  style: <omitted>
+                                  underline: none
+                                  variant: <omitted>
+                                  weight: <omitted>
+                                  wrap-mode: word
+              <AtkAction>
+              action 0 name: activate
+              action 0 description: Activates the entry
+            unnamed-GtkScaleAccessible-12
+              "slider"
+              parent: unnamed-GtkContainerAccessible-11
+              index: 3
+              description: Transparency of the color.
+              labelled-by: Opacity:
+              state: enabled focusable horizontal sensitive
+              toolkit: gtk
+              <AtkComponent>
+              layer: widget
+              alpha: 1
+              <AtkValue>
+              minimum value: 0.000000
+              maximum value: 255.000000
+              current value: 255.000000
+              minimum increment: 1.000000
+            Opacity:
+              "label"
+              parent: unnamed-GtkContainerAccessible-11
+              index: 4
+              name: Opacity:
+              label-for: unnamed-GtkScaleAccessible-12
+              state: enabled multi-line sensitive
+              toolkit: gtk
+              <AtkComponent>
+              layer: widget
+              alpha: 1
+              <AtkText>
+              text: Opacity:
+              character count: 8
+              caret offset: 0
+              default attributes: bg-color: <omitted>
+                                  bg-full-height: 0
+                                  direction: <omitted>
+                                  editable: false
+                                  family-name: <omitted>
+                                  fg-color: <omitted>
+                                  indent: 0
+                                  invisible: false
+                                  justification: left
+                                  language: <omitted>
+                                  left-margin: 0
+                                  pixels-above-lines: 0
+                                  pixels-below-lines: 0
+                                  pixels-inside-wrap: 0
+                                  right-margin: 0
+                                  rise: 0
+                                  scale: 1
+                                  size: <omitted>
+                                  stretch: <omitted>
+                                  strikethrough: false
+                                  style: <omitted>
+                                  underline: none
+                                  variant: <omitted>
+                                  weight: <omitted>
+                                  wrap-mode: word
+            unnamed-GtkWidgetAccessible-13
+              "separator"
+              parent: unnamed-GtkContainerAccessible-11
+              index: 5
+              state: enabled horizontal sensitive showing visible
+              toolkit: gtk
+              <AtkComponent>
+              layer: widget
+              alpha: 1
+            255
+              "spin button"
+              parent: unnamed-GtkContainerAccessible-11
+              index: 6
+              description: Amount of blue light in the color.
+              controller-for: unnamed-GtkWidgetAccessible-3
+              labelled-by: Blue:
+              state: editable enabled focusable horizontal sensitive showing single-line visible
+              toolkit: gtk
+              <AtkComponent>
+              layer: widget
+              alpha: 1
+              <AtkText>
+              text: 255
+              character count: 3
+              caret offset: 0
+              default attributes: bg-color: <omitted>
+                                  bg-full-height: 0
+                                  direction: <omitted>
+                                  editable: false
+                                  family-name: <omitted>
+                                  fg-color: <omitted>
+                                  indent: 0
+                                  invisible: false
+                                  justification: left
+                                  language: <omitted>
+                                  left-margin: 0
+                                  pixels-above-lines: 0
+                                  pixels-below-lines: 0
+                                  pixels-inside-wrap: 0
+                                  right-margin: 0
+                                  rise: 0
+                                  scale: 1
+                                  size: <omitted>
+                                  stretch: <omitted>
+                                  strikethrough: false
+                                  style: <omitted>
+                                  underline: none
+                                  variant: <omitted>
+                                  weight: <omitted>
+                                  wrap-mode: word
+              <AtkAction>
+              action 0 name: activate
+              action 0 description: Activates the entry
+              action 0 keybinding: <Alt>b
+              <AtkValue>
+              minimum value: 0.000000
+              maximum value: 255.000000
+              current value: 255.000000
+              minimum increment: 1.000000
+            Blue:
+              "label"
+              parent: unnamed-GtkContainerAccessible-11
+              index: 7
+              name: Blue:
+              label-for: 255
+              state: enabled multi-line sensitive showing visible
+              toolkit: gtk
+              <AtkComponent>
+              layer: widget
+              alpha: 1
+              <AtkText>
+              text: Blue:
+              character count: 5
+              caret offset: 0
+              default attributes: bg-color: <omitted>
+                                  bg-full-height: 0
+                                  direction: <omitted>
+                                  editable: false
+                                  family-name: <omitted>
+                                  fg-color: <omitted>
+                                  indent: 0
+                                  invisible: false
+                                  justification: left
+                                  language: <omitted>
+                                  left-margin: 0
+                                  pixels-above-lines: 0
+                                  pixels-below-lines: 0
+                                  pixels-inside-wrap: 0
+                                  right-margin: 0
+                                  rise: 0
+                                  scale: 1
+                                  size: <omitted>
+                                  stretch: <omitted>
+                                  strikethrough: false
+                                  style: <omitted>
+                                  underline: none
+                                  variant: <omitted>
+                                  weight: <omitted>
+                                  wrap-mode: word
+            255
+              "spin button"
+              parent: unnamed-GtkContainerAccessible-11
+              index: 8
+              description: Amount of green light in the color.
+              controller-for: unnamed-GtkWidgetAccessible-3
+              labelled-by: Green:
+              state: editable enabled focusable horizontal sensitive showing single-line visible
+              toolkit: gtk
+              <AtkComponent>
+              layer: widget
+              alpha: 1
+              <AtkText>
+              text: 255
+              character count: 3
+              caret offset: 0
+              default attributes: bg-color: <omitted>
+                                  bg-full-height: 0
+                                  direction: <omitted>
+                                  editable: false
+                                  family-name: <omitted>
+                                  fg-color: <omitted>
+                                  indent: 0
+                                  invisible: false
+                                  justification: left
+                                  language: <omitted>
+                                  left-margin: 0
+                                  pixels-above-lines: 0
+                                  pixels-below-lines: 0
+                                  pixels-inside-wrap: 0
+                                  right-margin: 0
+                                  rise: 0
+                                  scale: 1
+                                  size: <omitted>
+                                  stretch: <omitted>
+                                  strikethrough: false
+                                  style: <omitted>
+                                  underline: none
+                                  variant: <omitted>
+                                  weight: <omitted>
+                                  wrap-mode: word
+              <AtkAction>
+              action 0 name: activate
+              action 0 description: Activates the entry
+              action 0 keybinding: <Alt>g
+              <AtkValue>
+              minimum value: 0.000000
+              maximum value: 255.000000
+              current value: 255.000000
+              minimum increment: 1.000000
+            Green:
+              "label"
+              parent: unnamed-GtkContainerAccessible-11
+              index: 9
+              name: Green:
+              label-for: 255
+              state: enabled multi-line sensitive showing visible
+              toolkit: gtk
+              <AtkComponent>
+              layer: widget
+              alpha: 1
+              <AtkText>
+              text: Green:
+              character count: 6
+              caret offset: 0
+              default attributes: bg-color: <omitted>
+                                  bg-full-height: 0
+                                  direction: <omitted>
+                                  editable: false
+                                  family-name: <omitted>
+                                  fg-color: <omitted>
+                                  indent: 0
+                                  invisible: false
+                                  justification: left
+                                  language: <omitted>
+                                  left-margin: 0
+                                  pixels-above-lines: 0
+                                  pixels-below-lines: 0
+                                  pixels-inside-wrap: 0
+                                  right-margin: 0
+                                  rise: 0
+                                  scale: 1
+                                  size: <omitted>
+                                  stretch: <omitted>
+                                  strikethrough: false
+                                  style: <omitted>
+                                  underline: none
+                                  variant: <omitted>
+                                  weight: <omitted>
+                                  wrap-mode: word
+            255
+              "spin button"
+              parent: unnamed-GtkContainerAccessible-11
+              index: 10
+              description: Amount of red light in the color.
+              controller-for: unnamed-GtkWidgetAccessible-3
+              labelled-by: Red:
+              state: editable enabled focusable horizontal sensitive showing single-line visible
+              toolkit: gtk
+              <AtkComponent>
+              layer: widget
+              alpha: 1
+              <AtkText>
+              text: 255
+              character count: 3
+              caret offset: 0
+              default attributes: bg-color: <omitted>
+                                  bg-full-height: 0
+                                  direction: <omitted>
+                                  editable: false
+                                  family-name: <omitted>
+                                  fg-color: <omitted>
+                                  indent: 0
+                                  invisible: false
+                                  justification: left
+                                  language: <omitted>
+                                  left-margin: 0
+                                  pixels-above-lines: 0
+                                  pixels-below-lines: 0
+                                  pixels-inside-wrap: 0
+                                  right-margin: 0
+                                  rise: 0
+                                  scale: 1
+                                  size: <omitted>
+                                  stretch: <omitted>
+                                  strikethrough: false
+                                  style: <omitted>
+                                  underline: none
+                                  variant: <omitted>
+                                  weight: <omitted>
+                                  wrap-mode: word
+              <AtkAction>
+              action 0 name: activate
+              action 0 description: Activates the entry
+              action 0 keybinding: <Alt>r
+              <AtkValue>
+              minimum value: 0.000000
+              maximum value: 255.000000
+              current value: 255.000000
+              minimum increment: 1.000000
+            Red:
+              "label"
+              parent: unnamed-GtkContainerAccessible-11
+              index: 11
+              name: Red:
+              label-for: 255
+              state: enabled multi-line sensitive showing visible
+              toolkit: gtk
+              <AtkComponent>
+              layer: widget
+              alpha: 1
+              <AtkText>
+              text: Red:
+              character count: 4
+              caret offset: 0
+              default attributes: bg-color: <omitted>
+                                  bg-full-height: 0
+                                  direction: <omitted>
+                                  editable: false
+                                  family-name: <omitted>
+                                  fg-color: <omitted>
+                                  indent: 0
+                                  invisible: false
+                                  justification: left
+                                  language: <omitted>
+                                  left-margin: 0
+                                  pixels-above-lines: 0
+                                  pixels-below-lines: 0
+                                  pixels-inside-wrap: 0
+                                  right-margin: 0
+                                  rise: 0
+                                  scale: 1
+                                  size: <omitted>
+                                  stretch: <omitted>
+                                  strikethrough: false
+                                  style: <omitted>
+                                  underline: none
+                                  variant: <omitted>
+                                  weight: <omitted>
+                                  wrap-mode: word
+            100
+              "spin button"
+              parent: unnamed-GtkContainerAccessible-11
+              index: 12
+              description: Brightness of the color.
+              controller-for: unnamed-GtkWidgetAccessible-3
+              labelled-by: Value:
+              state: editable enabled focusable horizontal sensitive showing single-line visible
+              toolkit: gtk
+              <AtkComponent>
+              layer: widget
+              alpha: 1
+              <AtkText>
+              text: 100
+              character count: 3
+              caret offset: 0
+              default attributes: bg-color: <omitted>
+                                  bg-full-height: 0
+                                  direction: <omitted>
+                                  editable: false
+                                  family-name: <omitted>
+                                  fg-color: <omitted>
+                                  indent: 0
+                                  invisible: false
+                                  justification: left
+                                  language: <omitted>
+                                  left-margin: 0
+                                  pixels-above-lines: 0
+                                  pixels-below-lines: 0
+                                  pixels-inside-wrap: 0
+                                  right-margin: 0
+                                  rise: 0
+                                  scale: 1
+                                  size: <omitted>
+                                  stretch: <omitted>
+                                  strikethrough: false
+                                  style: <omitted>
+                                  underline: none
+                                  variant: <omitted>
+                                  weight: <omitted>
+                                  wrap-mode: word
+              <AtkAction>
+              action 0 name: activate
+              action 0 description: Activates the entry
+              action 0 keybinding: <Alt>v
+              <AtkValue>
+              minimum value: 0.000000
+              maximum value: 100.000000
+              current value: 100.000000
+              minimum increment: 1.000000
+            Value:
+              "label"
+              parent: unnamed-GtkContainerAccessible-11
+              index: 13
+              name: Value:
+              label-for: 100
+              state: enabled multi-line sensitive showing visible
+              toolkit: gtk
+              <AtkComponent>
+              layer: widget
+              alpha: 1
+              <AtkText>
+              text: Value:
+              character count: 6
+              caret offset: 0
+              default attributes: bg-color: <omitted>
+                                  bg-full-height: 0
+                                  direction: <omitted>
+                                  editable: false
+                                  family-name: <omitted>
+                                  fg-color: <omitted>
+                                  indent: 0
+                                  invisible: false
+                                  justification: left
+                                  language: <omitted>
+                                  left-margin: 0
+                                  pixels-above-lines: 0
+                                  pixels-below-lines: 0
+                                  pixels-inside-wrap: 0
+                                  right-margin: 0
+                                  rise: 0
+                                  scale: 1
+                                  size: <omitted>
+                                  stretch: <omitted>
+                                  strikethrough: false
+                                  style: <omitted>
+                                  underline: none
+                                  variant: <omitted>
+                                  weight: <omitted>
+                                  wrap-mode: word
+            0
+              "spin button"
+              parent: unnamed-GtkContainerAccessible-11
+              index: 14
+              description: Intensity of the color.
+              controller-for: unnamed-GtkWidgetAccessible-3
+              labelled-by: Saturation:
+              state: editable enabled focusable horizontal sensitive showing single-line visible
+              toolkit: gtk
+              <AtkComponent>
+              layer: widget
+              alpha: 1
+              <AtkText>
+              text: 0
+              character count: 1
+              caret offset: 0
+              default attributes: bg-color: <omitted>
+                                  bg-full-height: 0
+                                  direction: <omitted>
+                                  editable: false
+                                  family-name: <omitted>
+                                  fg-color: <omitted>
+                                  indent: 0
+                                  invisible: false
+                                  justification: left
+                                  language: <omitted>
+                                  left-margin: 0
+                                  pixels-above-lines: 0
+                                  pixels-below-lines: 0
+                                  pixels-inside-wrap: 0
+                                  right-margin: 0
+                                  rise: 0
+                                  scale: 1
+                                  size: <omitted>
+                                  stretch: <omitted>
+                                  strikethrough: false
+                                  style: <omitted>
+                                  underline: none
+                                  variant: <omitted>
+                                  weight: <omitted>
+                                  wrap-mode: word
+              <AtkAction>
+              action 0 name: activate
+              action 0 description: Activates the entry
+              action 0 keybinding: <Alt>a
+              <AtkValue>
+              minimum value: 0.000000
+              maximum value: 100.000000
+              current value: 0.000000
+              minimum increment: 1.000000
+            Saturation:
+              "label"
+              parent: unnamed-GtkContainerAccessible-11
+              index: 15
+              name: Saturation:
+              label-for: 0
+              state: enabled multi-line sensitive showing visible
+              toolkit: gtk
+              <AtkComponent>
+              layer: widget
+              alpha: 1
+              <AtkText>
+              text: Saturation:
+              character count: 11
+              caret offset: 0
+              default attributes: bg-color: <omitted>
+                                  bg-full-height: 0
+                                  direction: <omitted>
+                                  editable: false
+                                  family-name: <omitted>
+                                  fg-color: <omitted>
+                                  indent: 0
+                                  invisible: false
+                                  justification: left
+                                  language: <omitted>
+                                  left-margin: 0
+                                  pixels-above-lines: 0
+                                  pixels-below-lines: 0
+                                  pixels-inside-wrap: 0
+                                  right-margin: 0
+                                  rise: 0
+                                  scale: 1
+                                  size: <omitted>
+                                  stretch: <omitted>
+                                  strikethrough: false
+                                  style: <omitted>
+                                  underline: none
+                                  variant: <omitted>
+                                  weight: <omitted>
+                                  wrap-mode: word
+            0
+              "spin button"
+              parent: unnamed-GtkContainerAccessible-11
+              index: 16
+              description: Position on the color wheel.
+              controller-for: unnamed-GtkWidgetAccessible-3
+              labelled-by: Hue:
+              state: editable enabled focusable horizontal sensitive showing single-line visible
+              toolkit: gtk
+              <AtkComponent>
+              layer: widget
+              alpha: 1
+              <AtkText>
+              text: 0
+              character count: 1
+              caret offset: 0
+              default attributes: bg-color: <omitted>
+                                  bg-full-height: 0
+                                  direction: <omitted>
+                                  editable: false
+                                  family-name: <omitted>
+                                  fg-color: <omitted>
+                                  indent: 0
+                                  invisible: false
+                                  justification: left
+                                  language: <omitted>
+                                  left-margin: 0
+                                  pixels-above-lines: 0
+                                  pixels-below-lines: 0
+                                  pixels-inside-wrap: 0
+                                  right-margin: 0
+                                  rise: 0
+                                  scale: 1
+                                  size: <omitted>
+                                  stretch: <omitted>
+                                  strikethrough: false
+                                  style: <omitted>
+                                  underline: none
+                                  variant: <omitted>
+                                  weight: <omitted>
+                                  wrap-mode: word
+              <AtkAction>
+              action 0 name: activate
+              action 0 description: Activates the entry
+              action 0 keybinding: <Alt>h
+              <AtkValue>
+              minimum value: 0.000000
+              maximum value: 360.000000
+              current value: 0.000000
+              minimum increment: 1.000000
+            Hue:
+              "label"
+              parent: unnamed-GtkContainerAccessible-11
+              index: 17
+              name: Hue:
+              label-for: 0
+              state: enabled multi-line sensitive showing visible
+              toolkit: gtk
+              <AtkComponent>
+              layer: widget
+              alpha: 1
+              <AtkText>
+              text: Hue:
+              character count: 4
+              caret offset: 0
+              default attributes: bg-color: <omitted>
+                                  bg-full-height: 0
+                                  direction: <omitted>
+                                  editable: false
+                                  family-name: <omitted>
+                                  fg-color: <omitted>
+                                  indent: 0
+                                  invisible: false
+                                  justification: left
+                                  language: <omitted>
+                                  left-margin: 0
+                                  pixels-above-lines: 0
+                                  pixels-below-lines: 0
+                                  pixels-inside-wrap: 0
+                                  right-margin: 0
+                                  rise: 0
+                                  scale: 1
+                                  size: <omitted>
+                                  stretch: <omitted>
+                                  strikethrough: false
+                                  style: <omitted>
+                                  underline: none
+                                  variant: <omitted>
+                                  weight: <omitted>
+                                  wrap-mode: word
+          unnamed-GtkContainerAccessible-14
+            "filler"
+            parent: unnamed-GtkContainerAccessible-10
+            index: 1
+            state: enabled sensitive vertical
+            toolkit: gtk
+            <AtkComponent>
+            layer: widget
+            alpha: 1
+            Palette:
+              "label"
+              parent: unnamed-GtkContainerAccessible-14
+              index: 0
+              name: Palette:
+              label-for: unnamed-GtkWidgetAccessible-15
+              state: enabled multi-line sensitive visible
+              toolkit: gtk
+              <AtkComponent>
+              layer: widget
+              alpha: 1
+              <AtkText>
+              text: Palette:
+              character count: 8
+              caret offset: 0
+              default attributes: bg-color: <omitted>
+                                  bg-full-height: 0
+                                  direction: <omitted>
+                                  editable: false
+                                  family-name: <omitted>
+                                  fg-color: <omitted>
+                                  indent: 0
+                                  invisible: false
+                                  justification: left
+                                  language: <omitted>
+                                  left-margin: 0
+                                  pixels-above-lines: 0
+                                  pixels-below-lines: 0
+                                  pixels-inside-wrap: 0
+                                  right-margin: 0
+                                  rise: 0
+                                  scale: 1
+                                  size: <omitted>
+                                  stretch: <omitted>
+                                  strikethrough: false
+                                  style: <omitted>
+                                  underline: none
+                                  variant: <omitted>
+                                  weight: <omitted>
+                                  wrap-mode: word
+            unnamed-GtkContainerAccessible-16
+              "panel"
+              parent: unnamed-GtkContainerAccessible-14
+              index: 1
+              state: enabled horizontal sensitive visible
+              toolkit: gtk
+              <AtkComponent>
+              layer: widget
+              alpha: 1
+              unnamed-GtkFrameAccessible-17
+                "panel"
+                parent: unnamed-GtkContainerAccessible-16
+                index: 0
+                state: enabled sensitive visible
+                toolkit: gtk
+                <AtkComponent>
+                layer: widget
+                alpha: 1
+                unnamed-GtkWidgetAccessible-18
+                  "unknown"
+                  parent: unnamed-GtkFrameAccessible-17
+                  index: 0
+                  description: Click this palette entry to make it the current color. To change this entry, drag a color swatch here or right-click it and select "Save color here."
+                  state: enabled focusable sensitive visible
+                  toolkit: gtk
+                  <AtkComponent>
+                  layer: widget
+                  alpha: 1
+              unnamed-GtkFrameAccessible-19
+                "panel"
+                parent: unnamed-GtkContainerAccessible-16
+                index: 1
+                state: enabled sensitive visible
+                toolkit: gtk
+                <AtkComponent>
+                layer: widget
+                alpha: 1
+                unnamed-GtkWidgetAccessible-20
+                  "unknown"
+                  parent: unnamed-GtkFrameAccessible-19
+                  index: 0
+                  description: Click this palette entry to make it the current color. To change this entry, drag a color swatch here or right-click it and select "Save color here."
+                  state: enabled focusable sensitive visible
+                  toolkit: gtk
+                  <AtkComponent>
+                  layer: widget
+                  alpha: 1
+              unnamed-GtkFrameAccessible-21
+                "panel"
+                parent: unnamed-GtkContainerAccessible-16
+                index: 2
+                state: enabled sensitive visible
+                toolkit: gtk
+                <AtkComponent>
+                layer: widget
+                alpha: 1
+                unnamed-GtkWidgetAccessible-22
+                  "unknown"
+                  parent: unnamed-GtkFrameAccessible-21
+                  index: 0
+                  description: Click this palette entry to make it the current color. To change this entry, drag a color swatch here or right-click it and select "Save color here."
+                  state: enabled focusable sensitive visible
+                  toolkit: gtk
+                  <AtkComponent>
+                  layer: widget
+                  alpha: 1
+              unnamed-GtkFrameAccessible-23
+                "panel"
+                parent: unnamed-GtkContainerAccessible-16
+                index: 3
+                state: enabled sensitive visible
+                toolkit: gtk
+                <AtkComponent>
+                layer: widget
+                alpha: 1
+                unnamed-GtkWidgetAccessible-24
+                  "unknown"
+                  parent: unnamed-GtkFrameAccessible-23
+                  index: 0
+                  description: Click this palette entry to make it the current color. To change this entry, drag a color swatch here or right-click it and select "Save color here."
+                  state: enabled focusable sensitive visible
+                  toolkit: gtk
+                  <AtkComponent>
+                  layer: widget
+                  alpha: 1
+              unnamed-GtkFrameAccessible-25
+                "panel"
+                parent: unnamed-GtkContainerAccessible-16
+                index: 4
+                state: enabled sensitive visible
+                toolkit: gtk
+                <AtkComponent>
+                layer: widget
+                alpha: 1
+                unnamed-GtkWidgetAccessible-26
+                  "unknown"
+                  parent: unnamed-GtkFrameAccessible-25
+                  index: 0
+                  description: Click this palette entry to make it the current color. To change this entry, drag a color swatch here or right-click it and select "Save color here."
+                  state: enabled focusable sensitive visible
+                  toolkit: gtk
+                  <AtkComponent>
+                  layer: widget
+                  alpha: 1
+              unnamed-GtkFrameAccessible-27
+                "panel"
+                parent: unnamed-GtkContainerAccessible-16
+                index: 5
+                state: enabled sensitive visible
+                toolkit: gtk
+                <AtkComponent>
+                layer: widget
+                alpha: 1
+                unnamed-GtkWidgetAccessible-28
+                  "unknown"
+                  parent: unnamed-GtkFrameAccessible-27
+                  index: 0
+                  description: Click this palette entry to make it the current color. To change this entry, drag a color swatch here or right-click it and select "Save color here."
+                  state: enabled focusable sensitive visible
+                  toolkit: gtk
+                  <AtkComponent>
+                  layer: widget
+                  alpha: 1
+              unnamed-GtkFrameAccessible-29
+                "panel"
+                parent: unnamed-GtkContainerAccessible-16
+                index: 6
+                state: enabled sensitive visible
+                toolkit: gtk
+                <AtkComponent>
+                layer: widget
+                alpha: 1
+                unnamed-GtkWidgetAccessible-30
+                  "unknown"
+                  parent: unnamed-GtkFrameAccessible-29
+                  index: 0
+                  description: Click this palette entry to make it the current color. To change this entry, drag a color swatch here or right-click it and select "Save color here."
+                  state: enabled focusable sensitive visible
+                  toolkit: gtk
+                  <AtkComponent>
+                  layer: widget
+                  alpha: 1
+              unnamed-GtkFrameAccessible-31
+                "panel"
+                parent: unnamed-GtkContainerAccessible-16
+                index: 7
+                state: enabled sensitive visible
+                toolkit: gtk
+                <AtkComponent>
+                layer: widget
+                alpha: 1
+                unnamed-GtkWidgetAccessible-32
+                  "unknown"
+                  parent: unnamed-GtkFrameAccessible-31
+                  index: 0
+                  description: Click this palette entry to make it the current color. To change this entry, drag a color swatch here or right-click it and select "Save color here."
+                  state: enabled focusable sensitive visible
+                  toolkit: gtk
+                  <AtkComponent>
+                  layer: widget
+                  alpha: 1
+              unnamed-GtkFrameAccessible-33
+                "panel"
+                parent: unnamed-GtkContainerAccessible-16
+                index: 8
+                state: enabled sensitive visible
+                toolkit: gtk
+                <AtkComponent>
+                layer: widget
+                alpha: 1
+                unnamed-GtkWidgetAccessible-34
+                  "unknown"
+                  parent: unnamed-GtkFrameAccessible-33
+                  index: 0
+                  description: Click this palette entry to make it the current color. To change this entry, drag a color swatch here or right-click it and select "Save color here."
+                  state: enabled focusable sensitive visible
+                  toolkit: gtk
+                  <AtkComponent>
+                  layer: widget
+                  alpha: 1
+              unnamed-GtkFrameAccessible-35
+                "panel"
+                parent: unnamed-GtkContainerAccessible-16
+                index: 9
+                state: enabled sensitive visible
+                toolkit: gtk
+                <AtkComponent>
+                layer: widget
+                alpha: 1
+                unnamed-GtkWidgetAccessible-36
+                  "unknown"
+                  parent: unnamed-GtkFrameAccessible-35
+                  index: 0
+                  description: Click this palette entry to make it the current color. To change this entry, drag a color swatch here or right-click it and select "Save color here."
+                  state: enabled focusable sensitive visible
+                  toolkit: gtk
+                  <AtkComponent>
+                  layer: widget
+                  alpha: 1
+              unnamed-GtkFrameAccessible-37
+                "panel"
+                parent: unnamed-GtkContainerAccessible-16
+                index: 10
+                state: enabled sensitive visible
+                toolkit: gtk
+                <AtkComponent>
+                layer: widget
+                alpha: 1
+                unnamed-GtkWidgetAccessible-38
+                  "unknown"
+                  parent: unnamed-GtkFrameAccessible-37
+                  index: 0
+                  description: Click this palette entry to make it the current color. To change this entry, drag a color swatch here or right-click it and select "Save color here."
+                  state: enabled focusable sensitive visible
+                  toolkit: gtk
+                  <AtkComponent>
+                  layer: widget
+                  alpha: 1
+              unnamed-GtkFrameAccessible-39
+                "panel"
+                parent: unnamed-GtkContainerAccessible-16
+                index: 11
+                state: enabled sensitive visible
+                toolkit: gtk
+                <AtkComponent>
+                layer: widget
+                alpha: 1
+                unnamed-GtkWidgetAccessible-40
+                  "unknown"
+                  parent: unnamed-GtkFrameAccessible-39
+                  index: 0
+                  description: Click this palette entry to make it the current color. To change this entry, drag a color swatch here or right-click it and select "Save color here."
+                  state: enabled focusable sensitive visible
+                  toolkit: gtk
+                  <AtkComponent>
+                  layer: widget
+                  alpha: 1
+              unnamed-GtkFrameAccessible-41
+                "panel"
+                parent: unnamed-GtkContainerAccessible-16
+                index: 12
+                state: enabled sensitive visible
+                toolkit: gtk
+                <AtkComponent>
+                layer: widget
+                alpha: 1
+                unnamed-GtkWidgetAccessible-42
+                  "unknown"
+                  parent: unnamed-GtkFrameAccessible-41
+                  index: 0
+                  description: Click this palette entry to make it the current color. To change this entry, drag a color swatch here or right-click it and select "Save color here."
+                  state: enabled focusable sensitive visible
+                  toolkit: gtk
+                  <AtkComponent>
+                  layer: widget
+                  alpha: 1
+              unnamed-GtkFrameAccessible-43
+                "panel"
+                parent: unnamed-GtkContainerAccessible-16
+                index: 13
+                state: enabled sensitive visible
+                toolkit: gtk
+                <AtkComponent>
+                layer: widget
+                alpha: 1
+                unnamed-GtkWidgetAccessible-44
+                  "unknown"
+                  parent: unnamed-GtkFrameAccessible-43
+                  index: 0
+                  description: Click this palette entry to make it the current color. To change this entry, drag a color swatch here or right-click it and select "Save color here."
+                  state: enabled focusable sensitive visible
+                  toolkit: gtk
+                  <AtkComponent>
+                  layer: widget
+                  alpha: 1
+              unnamed-GtkFrameAccessible-45
+                "panel"
+                parent: unnamed-GtkContainerAccessible-16
+                index: 14
+                state: enabled sensitive visible
+                toolkit: gtk
+                <AtkComponent>
+                layer: widget
+                alpha: 1
+                unnamed-GtkWidgetAccessible-46
+                  "unknown"
+                  parent: unnamed-GtkFrameAccessible-45
+                  index: 0
+                  description: Click this palette entry to make it the current color. To change this entry, drag a color swatch here or right-click it and select "Save color here."
+                  state: enabled focusable sensitive visible
+                  toolkit: gtk
+                  <AtkComponent>
+                  layer: widget
+                  alpha: 1
+              unnamed-GtkFrameAccessible-47
+                "panel"
+                parent: unnamed-GtkContainerAccessible-16
+                index: 15
+                state: enabled sensitive visible
+                toolkit: gtk
+                <AtkComponent>
+                layer: widget
+                alpha: 1
+                unnamed-GtkWidgetAccessible-48
+                  "unknown"
+                  parent: unnamed-GtkFrameAccessible-47
+                  index: 0
+                  description: Click this palette entry to make it the current color. To change this entry, drag a color swatch here or right-click it and select "Save color here."
+                  state: enabled focusable sensitive visible
+                  toolkit: gtk
+                  <AtkComponent>
+                  layer: widget
+                  alpha: 1
+              unnamed-GtkFrameAccessible-49
+                "panel"
+                parent: unnamed-GtkContainerAccessible-16
+                index: 16
+                state: enabled sensitive visible
+                toolkit: gtk
+                <AtkComponent>
+                layer: widget
+                alpha: 1
+                unnamed-GtkWidgetAccessible-50
+                  "unknown"
+                  parent: unnamed-GtkFrameAccessible-49
+                  index: 0
+                  description: Click this palette entry to make it the current color. To change this entry, drag a color swatch here or right-click it and select "Save color here."
+                  state: enabled focusable sensitive visible
+                  toolkit: gtk
+                  <AtkComponent>
+                  layer: widget
+                  alpha: 1
+              unnamed-GtkFrameAccessible-51
+                "panel"
+                parent: unnamed-GtkContainerAccessible-16
+                index: 17
+                state: enabled sensitive visible
+                toolkit: gtk
+                <AtkComponent>
+                layer: widget
+                alpha: 1
+                unnamed-GtkWidgetAccessible-52
+                  "unknown"
+                  parent: unnamed-GtkFrameAccessible-51
+                  index: 0
+                  description: Click this palette entry to make it the current color. To change this entry, drag a color swatch here or right-click it and select "Save color here."
+                  state: enabled focusable sensitive visible
+                  toolkit: gtk
+                  <AtkComponent>
+                  layer: widget
+                  alpha: 1
+              unnamed-GtkFrameAccessible-53
+                "panel"
+                parent: unnamed-GtkContainerAccessible-16
+                index: 18
+                state: enabled sensitive visible
+                toolkit: gtk
+                <AtkComponent>
+                layer: widget
+                alpha: 1
+                unnamed-GtkWidgetAccessible-54
+                  "unknown"
+                  parent: unnamed-GtkFrameAccessible-53
+                  index: 0
+                  description: Click this palette entry to make it the current color. To change this entry, drag a color swatch here or right-click it and select "Save color here."
+                  state: enabled focusable sensitive visible
+                  toolkit: gtk
+                  <AtkComponent>
+                  layer: widget
+                  alpha: 1
+              unnamed-GtkFrameAccessible-55
+                "panel"
+                parent: unnamed-GtkContainerAccessible-16
+                index: 19
+                state: enabled sensitive visible
+                toolkit: gtk
+                <AtkComponent>
+                layer: widget
+                alpha: 1
+                unnamed-GtkWidgetAccessible-15
+                  "unknown"
+                  parent: unnamed-GtkFrameAccessible-55
+                  index: 0
+                  description: Click this palette entry to make it the current color. To change this entry, drag a color swatch here or right-click it and select "Save color here."
+                  labelled-by: Palette:
+                  state: enabled focusable sensitive visible
+                  toolkit: gtk
+                  <AtkComponent>
+                  layer: widget
+                  alpha: 1
+    action_area
+      "filler"
+      parent: vbox
+      index: 1
+      state: enabled horizontal sensitive showing visible
+      toolkit: gtk
+      <AtkComponent>
+      layer: widget
+      alpha: 1
+      unnamed-GtkButtonAccessible-56
+        "push button"
+        parent: action_area
+        index: 0
+        name: Help
+        state: enabled focusable sensitive
+        toolkit: gtk
+        <AtkComponent>
+        layer: widget
+        alpha: 1
+        <AtkImage>
+        image size: 20 x 20
+        image description: (null)
+        <AtkAction>
+        action 0 name: click
+        action 0 description: Clicks the button
+        action 0 keybinding: <Alt>h
+      unnamed-GtkButtonAccessible-57
+        "push button"
+        parent: action_area
+        index: 1
+        name: Select
+        state: enabled focusable sensitive showing visible default
+        toolkit: gtk
+        <AtkComponent>
+        layer: widget
+        alpha: 1
+        <AtkImage>
+        image size: -1 x -1
+        image description: (null)
+        <AtkAction>
+        action 0 name: click
+        action 0 description: Clicks the button
+        action 0 keybinding: <Alt>s
+      unnamed-GtkButtonAccessible-58
+        "push button"
+        parent: action_area
+        index: 2
+        name: Cancel
+        state: enabled focusable sensitive showing visible
+        toolkit: gtk
+        <AtkComponent>
+        layer: widget
+        alpha: 1
+        <AtkImage>
+        image size: 20 x 20
+        image description: (null)
+        <AtkAction>
+        action 0 name: click
+        action 0 description: Clicks the button
+        action 0 keybinding: <Alt>c
diff --git a/testsuite/a11y/colorchooser.ui b/testsuite/a11y/colorchooser.ui
new file mode 100644 (file)
index 0000000..c17f97d
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+  <!-- interface-requires gtk+ 3.0 -->
+  <object class="GtkColorSelectionDialog" id="window1">
+  </object>
+</interface>
diff --git a/testsuite/a11y/combos.txt b/testsuite/a11y/combos.txt
new file mode 100644 (file)
index 0000000..7bcd8e0
--- /dev/null
@@ -0,0 +1,229 @@
+window1
+  "window"
+  index: 0
+  state: enabled resizable sensitive showing visible
+  toolkit: gtk
+  <AtkComponent>
+  layer: window
+  alpha: 1
+  box1
+    "filler"
+    parent: window1
+    index: 0
+    state: enabled horizontal sensitive
+    toolkit: gtk
+    <AtkComponent>
+    layer: widget
+    alpha: 1
+    label1
+      "label"
+      parent: box1
+      index: 0
+      name: Combo:
+      label-for: combo1
+      state: enabled multi-line sensitive visible
+      toolkit: gtk
+      <AtkComponent>
+      layer: widget
+      alpha: 1
+      <AtkText>
+      text: Combo:
+      character count: 6
+      caret offset: 0
+      default attributes: bg-color: <omitted>
+                          bg-full-height: 0
+                          direction: <omitted>
+                          editable: false
+                          family-name: <omitted>
+                          fg-color: <omitted>
+                          indent: 0
+                          invisible: false
+                          justification: left
+                          language: <omitted>
+                          left-margin: 0
+                          pixels-above-lines: 0
+                          pixels-below-lines: 0
+                          pixels-inside-wrap: 0
+                          right-margin: 0
+                          rise: 0
+                          scale: 1
+                          size: <omitted>
+                          stretch: <omitted>
+                          strikethrough: false
+                          style: <omitted>
+                          underline: none
+                          variant: <omitted>
+                          weight: <omitted>
+                          wrap-mode: word
+    combo1
+      "combo box"
+      parent: box1
+      index: 1
+      labelled-by: label1
+      state: enabled sensitive visible
+      toolkit: gtk
+      <AtkComponent>
+      layer: widget
+      alpha: 1
+      <AtkAction>
+      action 0 name: press
+      action 0 description: Presses the combobox
+      action 0 keybinding: <Alt>c
+      unnamed-GtkMenuAccessible-0
+        "menu"
+        parent: combo1
+        index: 0
+        state: enabled sensitive
+        toolkit: gtk
+        <AtkComponent>
+        layer: popup
+        alpha: 1
+        <AtkSelection>
+    combo2
+      "combo box"
+      parent: box1
+      index: 2
+      state: enabled sensitive visible
+      toolkit: gtk
+      <AtkComponent>
+      layer: widget
+      alpha: 1
+      <AtkAction>
+      action 0 name: press
+      action 0 description: Presses the combobox
+      unnamed-GtkMenuAccessible-1
+        "menu"
+        parent: combo2
+        index: 0
+        state: enabled sensitive
+        toolkit: gtk
+        <AtkComponent>
+        layer: popup
+        alpha: 1
+        <AtkSelection>
+      
+        "text"
+        parent: combo2
+        index: 1
+        state: editable enabled focusable sensitive single-line visible
+        toolkit: gtk
+        <AtkComponent>
+        layer: widget
+        alpha: 1
+        <AtkText>
+        text: 
+        character count: 0
+        caret offset: 0
+        default attributes: bg-color: <omitted>
+                            bg-full-height: 0
+                            direction: <omitted>
+                            editable: false
+                            family-name: <omitted>
+                            fg-color: <omitted>
+                            indent: 0
+                            invisible: false
+                            justification: left
+                            language: <omitted>
+                            left-margin: 0
+                            pixels-above-lines: 0
+                            pixels-below-lines: 0
+                            pixels-inside-wrap: 0
+                            right-margin: 0
+                            rise: 0
+                            scale: 1
+                            size: <omitted>
+                            stretch: <omitted>
+                            strikethrough: false
+                            style: <omitted>
+                            underline: none
+                            variant: <omitted>
+                            weight: <omitted>
+                            wrap-mode: word
+        <AtkAction>
+        action 0 name: activate
+        action 0 description: Activates the entry
+    combo3
+      "combo box"
+      parent: box1
+      index: 3
+      state: enabled sensitive visible
+      toolkit: gtk
+      <AtkComponent>
+      layer: widget
+      alpha: 1
+      <AtkAction>
+      action 0 name: press
+      action 0 description: Presses the combobox
+      unnamed-GtkMenuAccessible-2
+        "menu"
+        parent: combo3
+        index: 0
+        state: enabled sensitive
+        toolkit: gtk
+        <AtkComponent>
+        layer: popup
+        alpha: 1
+        <AtkSelection>
+    combo4
+      "combo box"
+      parent: box1
+      index: 4
+      state: enabled sensitive visible
+      toolkit: gtk
+      <AtkComponent>
+      layer: widget
+      alpha: 1
+      <AtkAction>
+      action 0 name: press
+      action 0 description: Presses the combobox
+      unnamed-GtkMenuAccessible-3
+        "menu"
+        parent: combo4
+        index: 0
+        state: enabled sensitive
+        toolkit: gtk
+        <AtkComponent>
+        layer: popup
+        alpha: 1
+        <AtkSelection>
+      
+        "text"
+        parent: combo4
+        index: 1
+        state: editable enabled focusable sensitive single-line visible
+        toolkit: gtk
+        <AtkComponent>
+        layer: widget
+        alpha: 1
+        <AtkText>
+        text: 
+        character count: 0
+        caret offset: 0
+        default attributes: bg-color: <omitted>
+                            bg-full-height: 0
+                            direction: <omitted>
+                            editable: false
+                            family-name: <omitted>
+                            fg-color: <omitted>
+                            indent: 0
+                            invisible: false
+                            justification: left
+                            language: <omitted>
+                            left-margin: 0
+                            pixels-above-lines: 0
+                            pixels-below-lines: 0
+                            pixels-inside-wrap: 0
+                            right-margin: 0
+                            rise: 0
+                            scale: 1
+                            size: <omitted>
+                            stretch: <omitted>
+                            strikethrough: false
+                            style: <omitted>
+                            underline: none
+                            variant: <omitted>
+                            weight: <omitted>
+                            wrap-mode: word
+        <AtkAction>
+        action 0 name: activate
+        action 0 description: Activates the entry
diff --git a/testsuite/a11y/combos.ui b/testsuite/a11y/combos.ui
new file mode 100644 (file)
index 0000000..8ad2416
--- /dev/null
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+  <!-- interface-requires gtk+ 3.0 -->
+  <object class="GtkWindow" id="window1">
+    <property name="can_focus">False</property>
+    <property name="type">popup</property>
+    <child>
+      <object class="GtkBox" id="box1">
+        <child>
+          <object class="GtkLabel" id="label1">
+            <property name="visible">True</property>
+            <property name="label">_Combo:</property>
+            <property name="use-underline">True</property>
+            <property name="mnemonic-widget">combo1</property>
+          </object>
+        </child>
+        <child>
+          <object class="GtkComboBox" id="combo1">
+            <property name="visible">True</property>
+          </object>
+        </child>
+        <child>
+          <object class="GtkComboBox" id="combo2">
+            <property name="visible">True</property>
+            <property name="has-entry">True</property>
+          </object>
+        </child>
+        <child>
+          <object class="GtkComboBoxText" id="combo3">
+            <property name="visible">True</property>
+          </object>
+        </child>
+        <child>
+          <object class="GtkComboBoxText" id="combo4">
+            <property name="visible">True</property>
+            <property name="has-entry">True</property>
+          </object>
+        </child>
+      </object>
+    </child>
+  </object>
+</interface>
diff --git a/testsuite/a11y/derive.c b/testsuite/a11y/derive.c
new file mode 100644 (file)
index 0000000..6ecb47c
--- /dev/null
@@ -0,0 +1,73 @@
+/*
+ * Copyright (C) 2012 Red Hat Inc.
+ *
+ * Author:
+ *      Matthias Clasen <mclasen@redhat.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <gtk/gtk.h>
+#include <gtk/gtk-a11y.h>
+
+/* Implement a (trivial) GtkButton subclass, derive GtkButtonAccessible
+ * and use the derived accessible for our new button.
+ */
+
+typedef GtkButtonAccessible MyButtonAccessible;
+typedef GtkButtonAccessibleClass MyButtonAccessibleClass;
+
+G_DEFINE_TYPE (MyButtonAccessible, my_button_accessible, GTK_TYPE_BUTTON_ACCESSIBLE)
+
+static void
+my_button_accessible_init (MyButtonAccessible *a)
+{
+}
+
+static void
+my_button_accessible_class_init (MyButtonAccessibleClass *class)
+{
+}
+
+typedef GtkButton MyButton;
+typedef GtkButtonClass MyButtonClass;
+
+G_DEFINE_TYPE (MyButton, my_button, GTK_TYPE_BUTTON)
+
+static void
+my_button_init (MyButton *b)
+{
+}
+
+static void
+my_button_class_init (MyButtonClass *class)
+{
+  gtk_widget_class_set_accessible_type (GTK_WIDGET_CLASS (class),
+                                        my_button_accessible_get_type ());
+}
+
+int main (int argc, char *argv[])
+{
+  GtkWidget *widget;
+  GtkAccessible *accessible;
+
+  gtk_init (NULL, NULL);
+
+  widget = GTK_WIDGET (g_object_new (my_button_get_type (), NULL));
+  accessible = GTK_ACCESSIBLE (gtk_widget_get_accessible (widget));
+
+  g_assert (G_TYPE_CHECK_INSTANCE_TYPE (accessible, my_button_accessible_get_type ()));
+
+  return 0;
+}
diff --git a/testsuite/a11y/entries.txt b/testsuite/a11y/entries.txt
new file mode 100644 (file)
index 0000000..657a3f3
--- /dev/null
@@ -0,0 +1,330 @@
+window1
+  "window"
+  index: 0
+  state: enabled resizable sensitive showing visible
+  toolkit: gtk
+  <AtkComponent>
+  layer: window
+  alpha: 1
+  box1
+    "filler"
+    parent: window1
+    index: 0
+    state: enabled horizontal sensitive
+    toolkit: gtk
+    <AtkComponent>
+    layer: widget
+    alpha: 1
+    label1
+      "label"
+      parent: box1
+      index: 0
+      name: entry:
+      label-for: entry1
+      state: enabled multi-line sensitive visible
+      toolkit: gtk
+      <AtkComponent>
+      layer: widget
+      alpha: 1
+      <AtkText>
+      text: entry:
+      character count: 6
+      caret offset: 0
+      default attributes: bg-color: <omitted>
+                          bg-full-height: 0
+                          direction: <omitted>
+                          editable: false
+                          family-name: <omitted>
+                          fg-color: <omitted>
+                          indent: 0
+                          invisible: false
+                          justification: left
+                          language: <omitted>
+                          left-margin: 0
+                          pixels-above-lines: 0
+                          pixels-below-lines: 0
+                          pixels-inside-wrap: 0
+                          right-margin: 0
+                          rise: 0
+                          scale: 1
+                          size: <omitted>
+                          stretch: <omitted>
+                          strikethrough: false
+                          style: <omitted>
+                          underline: none
+                          variant: <omitted>
+                          weight: <omitted>
+                          wrap-mode: word
+    label2
+      "label"
+      parent: box1
+      index: 1
+      name: password entry:
+      label-for: entry2
+      state: enabled multi-line sensitive visible
+      toolkit: gtk
+      <AtkComponent>
+      layer: widget
+      alpha: 1
+      <AtkText>
+      text: password entry:
+      character count: 15
+      caret offset: 0
+      default attributes: bg-color: <omitted>
+                          bg-full-height: 0
+                          direction: <omitted>
+                          editable: false
+                          family-name: <omitted>
+                          fg-color: <omitted>
+                          indent: 0
+                          invisible: false
+                          justification: left
+                          language: <omitted>
+                          left-margin: 0
+                          pixels-above-lines: 0
+                          pixels-below-lines: 0
+                          pixels-inside-wrap: 0
+                          right-margin: 0
+                          rise: 0
+                          scale: 1
+                          size: <omitted>
+                          stretch: <omitted>
+                          strikethrough: false
+                          style: <omitted>
+                          underline: none
+                          variant: <omitted>
+                          weight: <omitted>
+                          wrap-mode: word
+    label3
+      "label"
+      parent: box1
+      index: 2
+      name: spinbutton:
+      label-for: spinbutton1
+      state: enabled multi-line sensitive visible
+      toolkit: gtk
+      <AtkComponent>
+      layer: widget
+      alpha: 1
+      <AtkText>
+      text: spinbutton:
+      character count: 11
+      caret offset: 0
+      default attributes: bg-color: <omitted>
+                          bg-full-height: 0
+                          direction: <omitted>
+                          editable: false
+                          family-name: <omitted>
+                          fg-color: <omitted>
+                          indent: 0
+                          invisible: false
+                          justification: left
+                          language: <omitted>
+                          left-margin: 0
+                          pixels-above-lines: 0
+                          pixels-below-lines: 0
+                          pixels-inside-wrap: 0
+                          right-margin: 0
+                          rise: 0
+                          scale: 1
+                          size: <omitted>
+                          stretch: <omitted>
+                          strikethrough: false
+                          style: <omitted>
+                          underline: none
+                          variant: <omitted>
+                          weight: <omitted>
+                          wrap-mode: word
+    entry1
+      "text"
+      parent: box1
+      index: 3
+      labelled-by: label1
+      state: editable enabled focusable sensitive single-line visible
+      toolkit: gtk
+      <AtkComponent>
+      layer: widget
+      alpha: 1
+      <AtkText>
+      text: text
+      character count: 4
+      caret offset: 0
+      default attributes: bg-color: <omitted>
+                          bg-full-height: 0
+                          direction: <omitted>
+                          editable: false
+                          family-name: <omitted>
+                          fg-color: <omitted>
+                          indent: 0
+                          invisible: false
+                          justification: left
+                          language: <omitted>
+                          left-margin: 0
+                          pixels-above-lines: 0
+                          pixels-below-lines: 0
+                          pixels-inside-wrap: 0
+                          right-margin: 0
+                          rise: 0
+                          scale: 1
+                          size: <omitted>
+                          stretch: <omitted>
+                          strikethrough: false
+                          style: <omitted>
+                          underline: none
+                          variant: <omitted>
+                          weight: <omitted>
+                          wrap-mode: word
+      <AtkAction>
+      action 0 name: activate
+      action 0 description: Activates the entry
+      action 0 keybinding: <Alt>e
+    entry2
+      "password text"
+      parent: box1
+      index: 4
+      labelled-by: label2
+      state: editable enabled focusable sensitive single-line visible
+      toolkit: gtk
+      <AtkComponent>
+      layer: widget
+      alpha: 1
+      <AtkText>
+      text: *************
+      character count: 13
+      caret offset: 0
+      default attributes: bg-color: <omitted>
+                          bg-full-height: 0
+                          direction: <omitted>
+                          editable: false
+                          family-name: <omitted>
+                          fg-color: <omitted>
+                          indent: 0
+                          invisible: false
+                          justification: left
+                          language: <omitted>
+                          left-margin: 0
+                          pixels-above-lines: 0
+                          pixels-below-lines: 0
+                          pixels-inside-wrap: 0
+                          right-margin: 0
+                          rise: 0
+                          scale: 1
+                          size: <omitted>
+                          stretch: <omitted>
+                          strikethrough: false
+                          style: <omitted>
+                          underline: none
+                          variant: <omitted>
+                          weight: <omitted>
+                          wrap-mode: word
+      <AtkAction>
+      action 0 name: activate
+      action 0 description: Activates the entry
+      action 0 keybinding: <Alt>p
+    entry3
+      "text"
+      parent: box1
+      index: 5
+      state: editable enabled focusable sensitive single-line visible
+      toolkit: gtk
+      <AtkComponent>
+      layer: widget
+      alpha: 1
+      <AtkText>
+      text: icons
+      character count: 5
+      caret offset: 0
+      default attributes: bg-color: <omitted>
+                          bg-full-height: 0
+                          direction: <omitted>
+                          editable: false
+                          family-name: <omitted>
+                          fg-color: <omitted>
+                          indent: 0
+                          invisible: false
+                          justification: left
+                          language: <omitted>
+                          left-margin: 0
+                          pixels-above-lines: 0
+                          pixels-below-lines: 0
+                          pixels-inside-wrap: 0
+                          right-margin: 0
+                          rise: 0
+                          scale: 1
+                          size: <omitted>
+                          stretch: <omitted>
+                          strikethrough: false
+                          style: <omitted>
+                          underline: none
+                          variant: <omitted>
+                          weight: <omitted>
+                          wrap-mode: word
+      <AtkAction>
+      action 0 name: activate
+      action 0 description: Activates the entry
+      unnamed-GtkEntryIconAccessible-0
+        "icon"
+        parent: entry3
+        state: enabled sensitive visible
+        <AtkComponent>
+        layer: widget
+        alpha: 1
+        <AtkAction>
+        action 0 name: activate
+      unnamed-GtkEntryIconAccessible-1
+        "icon"
+        parent: entry3
+        state: enabled sensitive visible
+        <AtkComponent>
+        layer: widget
+        alpha: 1
+        <AtkAction>
+        action 0 name: activate
+    spinbutton1
+      "spin button"
+      parent: box1
+      index: 6
+      labelled-by: label3
+      state: editable enabled focusable horizontal sensitive single-line visible
+      toolkit: gtk
+      <AtkComponent>
+      layer: widget
+      alpha: 1
+      <AtkText>
+      text: 
+      character count: 0
+      caret offset: 0
+      default attributes: bg-color: <omitted>
+                          bg-full-height: 0
+                          direction: <omitted>
+                          editable: false
+                          family-name: <omitted>
+                          fg-color: <omitted>
+                          indent: 0
+                          invisible: false
+                          justification: left
+                          language: <omitted>
+                          left-margin: 0
+                          pixels-above-lines: 0
+                          pixels-below-lines: 0
+                          pixels-inside-wrap: 0
+                          right-margin: 0
+                          rise: 0
+                          scale: 1
+                          size: <omitted>
+                          stretch: <omitted>
+                          strikethrough: false
+                          style: <omitted>
+                          underline: none
+                          variant: <omitted>
+                          weight: <omitted>
+                          wrap-mode: word
+      <AtkAction>
+      action 0 name: activate
+      action 0 description: Activates the entry
+      action 0 keybinding: <Alt>s
+      <AtkValue>
+      minimum value: 0.500000
+      maximum value: 99.500000
+      current value: 45.500000
+      minimum increment: 0.500000
diff --git a/testsuite/a11y/entries.ui b/testsuite/a11y/entries.ui
new file mode 100644 (file)
index 0000000..280d3bc
--- /dev/null
@@ -0,0 +1,73 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+  <!-- interface-requires gtk+ 3.0 -->
+  <object class="GtkAdjustment" id="adjustment1">
+    <property name="lower">0.5</property>
+    <property name="upper">99.5</property>
+    <property name="page-size">0</property>
+    <property name="value">45.5</property>
+    <property name="step-increment">0.5</property>
+    <property name="page-increment">5.0</property>
+  </object>
+  <object class="GtkWindow" id="window1">
+    <property name="can_focus">False</property>
+    <property name="type">popup</property>
+    <child>
+      <object class="GtkBox" id="box1">
+        <child>
+          <object class="GtkLabel" id="label1">
+            <property name="label">_entry:</property>
+            <property name="visible">True</property>
+            <property name="use-underline">True</property>
+            <property name="mnemonic-widget">entry1</property>
+          </object>
+        </child>
+        <child>
+          <object class="GtkLabel" id="label2">
+            <property name="label">_password entry:</property>
+            <property name="visible">True</property>
+            <property name="use-underline">True</property>
+            <property name="mnemonic-widget">entry2</property>
+          </object>
+        </child>
+        <child>
+          <object class="GtkLabel" id="label3">
+            <property name="label">_spinbutton:</property>
+            <property name="visible">True</property>
+            <property name="use-underline">True</property>
+            <property name="mnemonic-widget">spinbutton1</property>
+          </object>
+        </child>
+        <child>
+          <object class="GtkEntry" id="entry1">
+            <property name="text" translatable="yes">text</property>
+            <property name="visible">True</property>
+          </object>
+        </child>
+        <child>
+          <object class="GtkEntry" id="entry2">
+            <property name="text" translatable="yes">password text</property>
+            <property name="visible">True</property>
+            <property name="visibility">False</property>
+            <property name="invisible_char">*</property>
+            <property name="invisible_char_set">True</property>
+          </object>
+        </child>
+        <child>
+          <object class="GtkEntry" id="entry3">
+            <property name="text" translatable="yes">icons</property>
+            <property name="visible">True</property>
+            <property name="primary-icon-stock">stock1</property>
+            <property name="secondary-icon-stock">stock2</property>
+          </object>
+        </child>
+        <child>
+          <object class="GtkSpinButton" id="spinbutton1">
+            <property name="adjustment">adjustment1</property>
+            <property name="visible">True</property>
+          </object>
+        </child>
+      </object>
+    </child>
+  </object>
+</interface>
diff --git a/testsuite/a11y/expander.txt b/testsuite/a11y/expander.txt
new file mode 100644 (file)
index 0000000..68b6c08
--- /dev/null
@@ -0,0 +1,60 @@
+window1
+  "window"
+  index: 0
+  state: enabled resizable sensitive showing visible
+  toolkit: gtk
+  <AtkComponent>
+  layer: window
+  alpha: 1
+  expander1
+    "toggle button"
+    parent: window1
+    index: 0
+    name: Reveal this
+    state: enabled expandable focusable sensitive showing visible
+    toolkit: gtk
+    <AtkComponent>
+    layer: widget
+    alpha: 1
+    <AtkAction>
+    action 0 name: activate
+    action 0 description: Activates the expander
+    label1
+      "label"
+      parent: expander1
+      index: 0
+      name: Hello World!
+      state: enabled multi-line sensitive visible
+      toolkit: gtk
+      <AtkComponent>
+      layer: widget
+      alpha: 1
+      <AtkText>
+      text: Hello World!
+      character count: 12
+      caret offset: 0
+      default attributes: bg-color: <omitted>
+                          bg-full-height: 0
+                          direction: <omitted>
+                          editable: false
+                          family-name: <omitted>
+                          fg-color: <omitted>
+                          indent: 0
+                          invisible: false
+                          justification: left
+                          language: <omitted>
+                          left-margin: 0
+                          pixels-above-lines: 0
+                          pixels-below-lines: 0
+                          pixels-inside-wrap: 0
+                          right-margin: 0
+                          rise: 0
+                          scale: 1
+                          size: <omitted>
+                          stretch: <omitted>
+                          strikethrough: false
+                          style: <omitted>
+                          underline: none
+                          variant: <omitted>
+                          weight: <omitted>
+                          wrap-mode: word
diff --git a/testsuite/a11y/expander.ui b/testsuite/a11y/expander.ui
new file mode 100644 (file)
index 0000000..a0baf67
--- /dev/null
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+  <!-- interface-requires gtk+ 3.0 -->
+  <object class="GtkWindow" id="window1">
+    <property name="can_focus">False</property>
+    <property name="type">popup</property>
+    <child>
+      <object class="GtkExpander" id="expander1">
+        <property name="label" translatable="yes">Reveal this</property>
+        <property name="visible">True</property>
+        <child>
+          <object class="GtkLabel" id="label1">
+            <property name="label" translatable="yes">Hello World!</property>
+            <property name="visible">True</property>
+          </object>
+        </child>
+      </object>
+    </child>
+  </object>
+</interface>
diff --git a/testsuite/a11y/focus.c b/testsuite/a11y/focus.c
new file mode 100644 (file)
index 0000000..1b83ea6
--- /dev/null
@@ -0,0 +1,126 @@
+/*
+ * Copyright (C) 2011 Red Hat Inc.
+ *
+ * Author:
+ *      Matthias Clasen <mclasen@redhat.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <gtk/gtk.h>
+#include <string.h>
+const gchar data[] =
+  "<interface>"
+  "  <object class='GtkWindow' id='window1'>"
+  "    <property name='visible'>True</property>"
+  "    <child>"
+  "      <object class='GtkBox' id='box1'>"
+  "        <property name='visible'>True</property>"
+  "        <child>"
+  "          <object class='GtkEntry' id='entry1'>"
+  "            <property name='visible'>True</property>"
+  "            <property name='text'>entry1</property>"
+  "          </object>"
+  "        </child>"
+  "        <child>"
+  "          <object class='GtkEntry' id='entry2'>"
+  "            <property name='visible'>True</property>"
+  "            <property name='text'>entry2</property>"
+  "          </object>"
+  "        </child>"
+  "      </object>"
+  "    </child>"
+  "  </object>"
+  "</interface>";
+
+static void
+got_active (GObject *win, GParamSpec *pspec, gpointer data)
+{
+  gtk_main_quit ();
+}
+
+static void
+test_focus_change (void)
+{
+  GtkBuilder *builder;
+  GError *error;
+  GtkWidget *window;
+  GtkWidget *entry1;
+  GtkWidget *entry2;
+  AtkObject *wa;
+  AtkObject *ea1;
+  AtkObject *ea2;
+  GtkWidget *focus;
+  AtkStateSet *set;
+  gboolean ret;
+
+  builder = gtk_builder_new ();
+  error = NULL;
+  gtk_builder_add_from_string (builder, data, -1, &error);
+  g_assert_no_error (error);
+  window = (GtkWidget*)gtk_builder_get_object (builder, "window1");
+  entry1 = (GtkWidget*)gtk_builder_get_object (builder, "entry1");
+  entry2 = (GtkWidget*)gtk_builder_get_object (builder, "entry2");
+
+  wa = gtk_widget_get_accessible (window);
+  ea1 = gtk_widget_get_accessible (entry1);
+  ea2 = gtk_widget_get_accessible (entry2);
+
+#if 0
+  g_signal_connect (window, "notify::is-active", G_CALLBACK (got_active), NULL);
+  gtk_widget_show (window);
+  gtk_main ();
+  g_assert (gtk_window_is_active (GTK_WINDOW (window)));
+#endif
+
+  focus = gtk_window_get_focus (GTK_WINDOW (window));
+  g_assert (focus == entry1);
+
+  set = atk_object_ref_state_set (ea1);
+  ret = atk_state_set_contains_state (set, ATK_STATE_FOCUSED);
+  g_assert (ret);
+  g_object_unref (set);
+  set = atk_object_ref_state_set (ea2);
+  ret = atk_state_set_contains_state (set, ATK_STATE_FOCUSED);
+  g_assert (!ret);
+  g_object_unref (set);
+
+  gtk_widget_grab_focus (entry2);
+
+  focus = gtk_window_get_focus (GTK_WINDOW (window));
+  g_assert (focus == entry2);
+
+  set = atk_object_ref_state_set (ea1);
+  ret = atk_state_set_contains_state (set, ATK_STATE_FOCUSED);
+  g_assert (!ret);
+  g_object_unref (set);
+  set = atk_object_ref_state_set (ea2);
+  ret = atk_state_set_contains_state (set, ATK_STATE_FOCUSED);
+  g_assert (ret);
+  g_object_unref (set);
+
+  g_object_unref (builder);
+}
+
+
+int
+main (int argc, char *argv[])
+{
+  gtk_test_init (&argc, &argv, NULL);
+
+  g_test_add_func ("/focus/change", test_focus_change);
+
+  return g_test_run ();
+}
+
diff --git a/testsuite/a11y/hello-world.txt b/testsuite/a11y/hello-world.txt
new file mode 100644 (file)
index 0000000..d20b0eb
--- /dev/null
@@ -0,0 +1,24 @@
+window1
+  "window"
+  index: 0
+  state: enabled resizable sensitive showing visible
+  toolkit: gtk
+  <AtkComponent>
+  layer: window
+  alpha: 1
+  button1
+    "push button"
+    parent: window1
+    index: 0
+    name: Hello World!
+    state: enabled focusable sensitive showing visible
+    toolkit: gtk
+    <AtkComponent>
+    layer: widget
+    alpha: 1
+    <AtkImage>
+    image size: -1 x -1
+    image description: (null)
+    <AtkAction>
+    action 0 name: click
+    action 0 description: Clicks the button
diff --git a/testsuite/a11y/hello-world.ui b/testsuite/a11y/hello-world.ui
new file mode 100644 (file)
index 0000000..3dc8075
--- /dev/null
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+  <!-- interface-requires gtk+ 3.0 -->
+  <object class="GtkWindow" id="window1">
+    <property name="can_focus">False</property>
+    <property name="type">popup</property>
+    <child>
+      <object class="GtkButton" id="button1">
+        <property name="label" translatable="yes">Hello World!</property>
+        <property name="visible">True</property>
+        <property name="can_focus">True</property>
+        <property name="receives_default">True</property>
+        <property name="use_action_appearance">False</property>
+      </object>
+    </child>
+  </object>
+</interface>
diff --git a/testsuite/a11y/iconview.txt b/testsuite/a11y/iconview.txt
new file mode 100644 (file)
index 0000000..c71c8e0
--- /dev/null
@@ -0,0 +1,90 @@
+window1
+  "window"
+  index: 0
+  state: enabled resizable sensitive showing visible
+  toolkit: gtk
+  <AtkComponent>
+  layer: window
+  alpha: 1
+  iv1
+    "layered pane"
+    parent: window1
+    index: 0
+    state: enabled focusable sensitive showing visible
+    toolkit: gtk
+    <AtkComponent>
+    layer: widget
+    alpha: 1
+    <AtkSelection>
+    One
+      "icon"
+      parent: iv1
+      index: 0
+      state: enabled focusable selectable sensitive showing visible
+      <AtkComponent>
+      layer: widget
+      alpha: 1
+      <AtkText>
+      text: One
+      character count: 3
+      caret offset: 0
+      <AtkImage>
+      image size: 0 x 0
+      image description: (null)
+      <AtkAction>
+      action 0 name: activate
+      action 0 description: Activate item
+    Three
+      "icon"
+      parent: iv1
+      index: 1
+      state: enabled focusable selectable sensitive showing visible
+      <AtkComponent>
+      layer: widget
+      alpha: 1
+      <AtkText>
+      text: Three
+      character count: 5
+      caret offset: 0
+      <AtkImage>
+      image size: 0 x 0
+      image description: (null)
+      <AtkAction>
+      action 0 name: activate
+      action 0 description: Activate item
+    Five
+      "icon"
+      parent: iv1
+      index: 2
+      state: enabled focusable selectable sensitive showing visible
+      <AtkComponent>
+      layer: widget
+      alpha: 1
+      <AtkText>
+      text: Five
+      character count: 4
+      caret offset: 0
+      <AtkImage>
+      image size: 0 x 0
+      image description: (null)
+      <AtkAction>
+      action 0 name: activate
+      action 0 description: Activate item
+    Seven
+      "icon"
+      parent: iv1
+      index: 3
+      state: enabled focusable selectable sensitive showing visible
+      <AtkComponent>
+      layer: widget
+      alpha: 1
+      <AtkText>
+      text: Seven
+      character count: 5
+      caret offset: 0
+      <AtkImage>
+      image size: 0 x 0
+      image description: (null)
+      <AtkAction>
+      action 0 name: activate
+      action 0 description: Activate item
diff --git a/testsuite/a11y/iconview.ui b/testsuite/a11y/iconview.ui
new file mode 100644 (file)
index 0000000..ba5d89c
--- /dev/null
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+  <!-- interface-requires gtk+ 3.0 -->
+  <object class="GtkListStore" id="liststore1">
+    <columns>
+      <column type="gchararray"/>
+      <column type="gchararray"/>
+    </columns>
+    <data>
+      <row><col id="0">One</col><col id="1">Two</col></row>
+      <row><col id="0">Three</col><col id="1">Four</col></row>
+      <row><col id="0">Five</col><col id="1">Six</col></row>
+      <row><col id="0">Seven</col><col id="1">Eight</col></row>
+    </data>
+  </object>
+  <object class="GtkWindow" id="window1">
+    <property name="can_focus">False</property>
+    <property name="type">popup</property>
+    <child>
+      <object class="GtkIconView" id="iv1">
+        <property name="visible">True</property>
+        <property name="model">liststore1</property>
+        <child>
+          <object class="GtkCellRendererText" id="renderer1">
+          </object>
+          <attributes>
+            <attribute name="text">0</attribute>
+          </attributes>
+        </child>
+      </object>
+    </child>
+  </object>
+</interface>
diff --git a/testsuite/a11y/infobar.txt b/testsuite/a11y/infobar.txt
new file mode 100644 (file)
index 0000000..0fa016a
--- /dev/null
@@ -0,0 +1,75 @@
+window1
+  "window"
+  index: 0
+  state: enabled resizable sensitive showing visible
+  toolkit: gtk
+  <AtkComponent>
+  layer: window
+  alpha: 1
+  bar1
+    "alert"
+    parent: window1
+    index: 0
+    name: Information
+    state: enabled horizontal sensitive showing visible
+    toolkit: gtk
+    <AtkComponent>
+    layer: widget
+    alpha: 1
+    box1
+      "filler"
+      parent: bar1
+      index: 0
+      state: enabled horizontal sensitive showing visible
+      toolkit: gtk
+      <AtkComponent>
+      layer: widget
+      alpha: 1
+      label1
+        "label"
+        parent: box1
+        index: 0
+        name: Some important info
+        state: enabled multi-line sensitive showing visible
+        toolkit: gtk
+        <AtkComponent>
+        layer: widget
+        alpha: 1
+        <AtkText>
+        text: Some important info
+        character count: 19
+        caret offset: 0
+        default attributes: bg-color: <omitted>
+                            bg-full-height: 0
+                            direction: <omitted>
+                            editable: false
+                            family-name: <omitted>
+                            fg-color: <omitted>
+                            indent: 0
+                            invisible: false
+                            justification: left
+                            language: <omitted>
+                            left-margin: 0
+                            pixels-above-lines: 0
+                            pixels-below-lines: 0
+                            pixels-inside-wrap: 0
+                            right-margin: 0
+                            rise: 0
+                            scale: 1
+                            size: <omitted>
+                            stretch: <omitted>
+                            strikethrough: false
+                            style: <omitted>
+                            underline: none
+                            variant: <omitted>
+                            weight: <omitted>
+                            wrap-mode: word
+    action_area
+      "filler"
+      parent: bar1
+      index: 1
+      state: enabled sensitive showing vertical visible
+      toolkit: gtk
+      <AtkComponent>
+      layer: widget
+      alpha: 1
diff --git a/testsuite/a11y/infobar.ui b/testsuite/a11y/infobar.ui
new file mode 100644 (file)
index 0000000..a082198
--- /dev/null
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+  <!-- interface-requires gtk+ 3.0 -->
+  <object class="GtkWindow" id="window1">
+    <property name="can_focus">False</property>
+    <property name="type">popup</property>
+    <child>
+      <object class="GtkInfoBar" id="bar1">
+        <property name="visible">True</property>
+        <property name="message-type">info</property>
+        <child internal-child="content_area">
+          <object class="GtkBox" id="box1">
+            <child>
+              <object class="GtkLabel" id="label1">
+                <property name="visible">True</property>
+                <property name="label" translatable="yes">Some important info</property>
+              </object>
+            </child>
+          </object>
+        </child>
+      </object>
+    </child>
+  </object>
+</interface>
diff --git a/testsuite/a11y/link.txt b/testsuite/a11y/link.txt
new file mode 100644 (file)
index 0000000..c560183
--- /dev/null
@@ -0,0 +1,26 @@
+window1
+  "window"
+  index: 0
+  state: enabled resizable sensitive showing visible
+  toolkit: gtk
+  <AtkComponent>
+  layer: window
+  alpha: 1
+  button1
+    "push button"
+    parent: window1
+    index: 0
+    name: Hello World!
+    state: enabled focusable sensitive showing visible
+    toolkit: gtk
+    <AtkComponent>
+    layer: widget
+    alpha: 1
+    <AtkImage>
+    image size: -1 x -1
+    image description: (null)
+    <AtkAction>
+    action 0 name: click
+    action 0 description: Clicks the button
+    <AtkHyperlinkImpl>
+    anchors: http://www.gtk.org
diff --git a/testsuite/a11y/link.ui b/testsuite/a11y/link.ui
new file mode 100644 (file)
index 0000000..d8cff27
--- /dev/null
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+  <!-- interface-requires gtk+ 3.0 -->
+  <object class="GtkWindow" id="window1">
+    <property name="can_focus">False</property>
+    <property name="type">popup</property>
+    <child>
+      <object class="GtkLinkButton" id="button1">
+        <property name="label" translatable="yes">Hello World!</property>
+        <property name="visible">True</property>
+        <property name="can_focus">True</property>
+        <property name="uri">http://www.gtk.org</property>
+      </object>
+    </child>
+  </object>
+</interface>
diff --git a/testsuite/a11y/lockbutton.txt b/testsuite/a11y/lockbutton.txt
new file mode 100644 (file)
index 0000000..845c6c8
--- /dev/null
@@ -0,0 +1,26 @@
+window1
+  "window"
+  index: 0
+  state: enabled resizable sensitive showing visible
+  toolkit: gtk
+  <AtkComponent>
+  layer: window
+  alpha: 1
+  button1
+    "push button"
+    parent: window1
+    index: 0
+    name: Lock
+    description: Dialog is unlocked.
+Click to prevent further changes
+    state: enabled focusable sensitive showing visible
+    toolkit: gtk
+    <AtkComponent>
+    layer: widget
+    alpha: 1
+    <AtkImage>
+    image size: -1 x -1
+    image description: (null)
+    <AtkAction>
+    action 0 name: click
+    action 0 description: Clicks the button
diff --git a/testsuite/a11y/lockbutton.ui b/testsuite/a11y/lockbutton.ui
new file mode 100644 (file)
index 0000000..7df14c8
--- /dev/null
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+  <!-- interface-requires gtk+ 3.0 -->
+  <object class="GtkWindow" id="window1">
+    <property name="can_focus">False</property>
+    <property name="type">popup</property>
+    <child>
+      <object class="GtkLockButton" id="button1">
+        <property name="visible">True</property>
+      </object>
+    </child>
+  </object>
+</interface>
diff --git a/testsuite/a11y/menu.txt b/testsuite/a11y/menu.txt
new file mode 100644 (file)
index 0000000..315fd91
--- /dev/null
@@ -0,0 +1,315 @@
+window1
+  "frame"
+  index: 0
+  state: enabled resizable sensitive showing visible
+  toolkit: gtk
+  <AtkComponent>
+  layer: window
+  alpha: 1
+  menubar1
+    "menu bar"
+    parent: window1
+    index: 0
+    state: enabled sensitive showing visible
+    toolkit: gtk
+    <AtkComponent>
+    layer: widget
+    alpha: 1
+    <AtkSelection>
+    menuitem1
+      "menu"
+      parent: menubar1
+      index: 0
+      name: File
+      state: enabled selectable sensitive showing visible
+      toolkit: gtk
+      <AtkComponent>
+      layer: popup
+      alpha: 1
+      <AtkAction>
+      action 0 name: click
+      action 0 description: Clicks the menuitem
+      action 0 keybinding: <Alt>f;<Alt>f;
+      <AtkSelection>
+      imagemenuitem1
+        "menu item"
+        parent: menuitem1
+        index: 0
+        name: New
+        state: enabled selectable sensitive visible
+        toolkit: gtk
+        <AtkComponent>
+        layer: popup
+        alpha: 1
+        <AtkAction>
+        action 0 name: click
+        action 0 description: Clicks the menuitem
+        action 0 keybinding: n;<Alt>f:n;
+        <AtkSelection>
+      imagemenuitem2
+        "menu"
+        parent: menuitem1
+        index: 1
+        name: Open
+        state: enabled selectable sensitive visible
+        toolkit: gtk
+        <AtkComponent>
+        layer: popup
+        alpha: 1
+        <AtkAction>
+        action 0 name: click
+        action 0 description: Clicks the menuitem
+        action 0 keybinding: o;<Alt>f:o;
+        <AtkSelection>
+        radiomenuitem1
+          "radio menu item"
+          parent: imagemenuitem2
+          index: 0
+          name: One
+          member-of: radiomenuitem3
+                     radiomenuitem2
+                     radiomenuitem1
+          state: checked enabled selectable sensitive visible
+          toolkit: gtk
+          <AtkComponent>
+          layer: popup
+          alpha: 1
+          <AtkAction>
+          action 0 name: click
+          action 0 description: Clicks the menuitem
+          <AtkSelection>
+        radiomenuitem2
+          "radio menu item"
+          parent: imagemenuitem2
+          index: 1
+          name: Two
+          member-of: radiomenuitem3
+                     radiomenuitem2
+                     radiomenuitem1
+          state: enabled selectable sensitive visible
+          toolkit: gtk
+          <AtkComponent>
+          layer: popup
+          alpha: 1
+          <AtkAction>
+          action 0 name: click
+          action 0 description: Clicks the menuitem
+          <AtkSelection>
+        radiomenuitem3
+          "radio menu item"
+          parent: imagemenuitem2
+          index: 2
+          name: Three
+          member-of: radiomenuitem3
+                     radiomenuitem2
+                     radiomenuitem1
+          state: enabled selectable sensitive visible
+          toolkit: gtk
+          <AtkComponent>
+          layer: popup
+          alpha: 1
+          <AtkAction>
+          action 0 name: click
+          action 0 description: Clicks the menuitem
+          <AtkSelection>
+      imagemenuitem3
+        "menu item"
+        parent: menuitem1
+        index: 2
+        name: Save
+        state: enabled selectable sensitive visible
+        toolkit: gtk
+        <AtkComponent>
+        layer: popup
+        alpha: 1
+        <AtkAction>
+        action 0 name: click
+        action 0 description: Clicks the menuitem
+        action 0 keybinding: s;<Alt>f:s;
+        <AtkSelection>
+      imagemenuitem4
+        "menu item"
+        parent: menuitem1
+        index: 3
+        name: Save As
+        state: enabled selectable sensitive visible
+        toolkit: gtk
+        <AtkComponent>
+        layer: popup
+        alpha: 1
+        <AtkAction>
+        action 0 name: click
+        action 0 description: Clicks the menuitem
+        action 0 keybinding: a;<Alt>f:a;
+        <AtkSelection>
+      separatormenuitem1
+        "separator"
+        parent: menuitem1
+        index: 4
+        state: enabled selectable sensitive visible
+        toolkit: gtk
+        <AtkComponent>
+        layer: popup
+        alpha: 1
+        <AtkAction>
+        <AtkSelection>
+      checkmenuitem1
+        "check menu item"
+        parent: menuitem1
+        index: 5
+        name: awesome
+        state: selectable sensitive visible indeterminate
+        toolkit: gtk
+        <AtkComponent>
+        layer: popup
+        alpha: 1
+        <AtkAction>
+        action 0 name: click
+        action 0 description: Clicks the menuitem
+        <AtkSelection>
+      separatormenuitem2
+        "separator"
+        parent: menuitem1
+        index: 6
+        state: enabled selectable sensitive visible
+        toolkit: gtk
+        <AtkComponent>
+        layer: popup
+        alpha: 1
+        <AtkAction>
+        <AtkSelection>
+      imagemenuitem5
+        "menu item"
+        parent: menuitem1
+        index: 7
+        name: Quit
+        state: enabled selectable sensitive visible
+        toolkit: gtk
+        <AtkComponent>
+        layer: popup
+        alpha: 1
+        <AtkAction>
+        action 0 name: click
+        action 0 description: Clicks the menuitem
+        action 0 keybinding: q;<Alt>f:q;
+        <AtkSelection>
+    menuitem2
+      "menu"
+      parent: menubar1
+      index: 1
+      name: Edit
+      state: enabled selectable sensitive showing visible
+      toolkit: gtk
+      <AtkComponent>
+      layer: popup
+      alpha: 1
+      <AtkAction>
+      action 0 name: click
+      action 0 description: Clicks the menuitem
+      action 0 keybinding: <Alt>e;<Alt>e;
+      <AtkSelection>
+      imagemenuitem6
+        "menu item"
+        parent: menuitem2
+        index: 0
+        name: Cut
+        state: enabled selectable sensitive visible
+        toolkit: gtk
+        <AtkComponent>
+        layer: popup
+        alpha: 1
+        <AtkAction>
+        action 0 name: click
+        action 0 description: Clicks the menuitem
+        action 0 keybinding: t;<Alt>e:t;
+        <AtkSelection>
+      imagemenuitem7
+        "menu item"
+        parent: menuitem2
+        index: 1
+        name: Copy
+        state: enabled selectable sensitive visible
+        toolkit: gtk
+        <AtkComponent>
+        layer: popup
+        alpha: 1
+        <AtkAction>
+        action 0 name: click
+        action 0 description: Clicks the menuitem
+        action 0 keybinding: c;<Alt>e:c;
+        <AtkSelection>
+      imagemenuitem8
+        "menu item"
+        parent: menuitem2
+        index: 2
+        name: Paste
+        state: enabled selectable sensitive visible
+        toolkit: gtk
+        <AtkComponent>
+        layer: popup
+        alpha: 1
+        <AtkAction>
+        action 0 name: click
+        action 0 description: Clicks the menuitem
+        action 0 keybinding: p;<Alt>e:p;
+        <AtkSelection>
+      imagemenuitem9
+        "menu item"
+        parent: menuitem2
+        index: 3
+        name: Delete
+        state: enabled selectable sensitive visible
+        toolkit: gtk
+        <AtkComponent>
+        layer: popup
+        alpha: 1
+        <AtkAction>
+        action 0 name: click
+        action 0 description: Clicks the menuitem
+        action 0 keybinding: d;<Alt>e:d;
+        <AtkSelection>
+    menuitem3
+      "menu item"
+      parent: menubar1
+      index: 2
+      name: View
+      state: enabled selectable sensitive showing visible
+      toolkit: gtk
+      <AtkComponent>
+      layer: popup
+      alpha: 1
+      <AtkAction>
+      action 0 name: click
+      action 0 description: Clicks the menuitem
+      action 0 keybinding: <Alt>v;<Alt>v;
+      <AtkSelection>
+    menuitem4
+      "menu"
+      parent: menubar1
+      index: 3
+      name: Help
+      state: enabled selectable sensitive showing visible
+      toolkit: gtk
+      <AtkComponent>
+      layer: popup
+      alpha: 1
+      <AtkAction>
+      action 0 name: click
+      action 0 description: Clicks the menuitem
+      action 0 keybinding: <Alt>h;<Alt>h;
+      <AtkSelection>
+      imagemenuitem10
+        "menu item"
+        parent: menuitem4
+        index: 0
+        name: About
+        state: enabled selectable sensitive visible
+        toolkit: gtk
+        <AtkComponent>
+        layer: popup
+        alpha: 1
+        <AtkAction>
+        action 0 name: click
+        action 0 description: Clicks the menuitem
+        action 0 keybinding: a;<Alt>h:a;
+        <AtkSelection>
diff --git a/testsuite/a11y/menu.ui b/testsuite/a11y/menu.ui
new file mode 100644 (file)
index 0000000..bb2274f
--- /dev/null
@@ -0,0 +1,230 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+  <!-- interface-requires gtk+ 3.0 -->
+  <object class="GtkWindow" id="window1">
+    <property name="can_focus">False</property>
+    <child>
+      <object class="GtkMenuBar" id="menubar1">
+        <property name="visible">True</property>
+        <property name="can_focus">False</property>
+        <child>
+          <object class="GtkMenuItem" id="menuitem1">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="use_action_appearance">False</property>
+            <property name="label" translatable="yes">_File</property>
+            <property name="use_underline">True</property>
+            <child type="submenu">
+              <object class="GtkMenu" id="menu1">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <child>
+                  <object class="GtkImageMenuItem" id="imagemenuitem1">
+                    <property name="label">gtk-new</property>
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="use_action_appearance">False</property>
+                    <property name="use_underline">True</property>
+                    <property name="use_stock">True</property>
+                  </object>
+                </child>
+                <child>
+                  <object class="GtkImageMenuItem" id="imagemenuitem2">
+                    <property name="label">gtk-open</property>
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="use_action_appearance">False</property>
+                    <property name="use_underline">True</property>
+                    <property name="use_stock">True</property>
+                    <child type="submenu">
+                      <object class="GtkMenu" id="menu4">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <child>
+                          <object class="GtkRadioMenuItem" id="radiomenuitem1">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="use_action_appearance">False</property>
+                            <property name="label" translatable="yes">One</property>
+                            <property name="use_underline">True</property>
+                            <property name="active">True</property>
+                            <property name="draw_as_radio">True</property>
+                          </object>
+                        </child>
+                        <child>
+                          <object class="GtkRadioMenuItem" id="radiomenuitem2">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="use_action_appearance">False</property>
+                            <property name="label" translatable="yes">Two</property>
+                            <property name="use_underline">True</property>
+                            <property name="draw_as_radio">True</property>
+                            <property name="group">radiomenuitem1</property>
+                          </object>
+                        </child>
+                        <child>
+                          <object class="GtkRadioMenuItem" id="radiomenuitem3">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="use_action_appearance">False</property>
+                            <property name="label" translatable="yes">Three</property>
+                            <property name="use_underline">True</property>
+                            <property name="draw_as_radio">True</property>
+                            <property name="group">radiomenuitem1</property>
+                          </object>
+                        </child>
+                      </object>
+                    </child>
+                  </object>
+                </child>
+                <child>
+                  <object class="GtkImageMenuItem" id="imagemenuitem3">
+                    <property name="label">gtk-save</property>
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="use_action_appearance">False</property>
+                    <property name="use_underline">True</property>
+                    <property name="use_stock">True</property>
+                  </object>
+                </child>
+                <child>
+                  <object class="GtkImageMenuItem" id="imagemenuitem4">
+                    <property name="label">gtk-save-as</property>
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="use_action_appearance">False</property>
+                    <property name="use_underline">True</property>
+                    <property name="use_stock">True</property>
+                  </object>
+                </child>
+                <child>
+                  <object class="GtkSeparatorMenuItem" id="separatormenuitem1">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="use_action_appearance">False</property>
+                  </object>
+                </child>
+                <child>
+                  <object class="GtkCheckMenuItem" id="checkmenuitem1">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="use_action_appearance">False</property>
+                    <property name="label" translatable="yes">awesome</property>
+                    <property name="use_underline">True</property>
+                    <property name="inconsistent">True</property>
+                  </object>
+                </child>
+                <child>
+                  <object class="GtkSeparatorMenuItem" id="separatormenuitem2">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="use_action_appearance">False</property>
+                  </object>
+                </child>
+                <child>
+                  <object class="GtkImageMenuItem" id="imagemenuitem5">
+                    <property name="label">gtk-quit</property>
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="use_action_appearance">False</property>
+                    <property name="use_underline">True</property>
+                    <property name="use_stock">True</property>
+                  </object>
+                </child>
+              </object>
+            </child>
+          </object>
+        </child>
+        <child>
+          <object class="GtkMenuItem" id="menuitem2">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="use_action_appearance">False</property>
+            <property name="label" translatable="yes">_Edit</property>
+            <property name="use_underline">True</property>
+            <child type="submenu">
+              <object class="GtkMenu" id="menu2">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <child>
+                  <object class="GtkImageMenuItem" id="imagemenuitem6">
+                    <property name="label">gtk-cut</property>
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="use_action_appearance">False</property>
+                    <property name="use_underline">True</property>
+                    <property name="use_stock">True</property>
+                  </object>
+                </child>
+                <child>
+                  <object class="GtkImageMenuItem" id="imagemenuitem7">
+                    <property name="label">gtk-copy</property>
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="use_action_appearance">False</property>
+                    <property name="use_underline">True</property>
+                    <property name="use_stock">True</property>
+                  </object>
+                </child>
+                <child>
+                  <object class="GtkImageMenuItem" id="imagemenuitem8">
+                    <property name="label">gtk-paste</property>
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="use_action_appearance">False</property>
+                    <property name="use_underline">True</property>
+                    <property name="use_stock">True</property>
+                  </object>
+                </child>
+                <child>
+                  <object class="GtkImageMenuItem" id="imagemenuitem9">
+                    <property name="label">gtk-delete</property>
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="use_action_appearance">False</property>
+                    <property name="use_underline">True</property>
+                    <property name="use_stock">True</property>
+                  </object>
+                </child>
+              </object>
+            </child>
+          </object>
+        </child>
+        <child>
+          <object class="GtkMenuItem" id="menuitem3">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="use_action_appearance">False</property>
+            <property name="label" translatable="yes">_View</property>
+            <property name="use_underline">True</property>
+          </object>
+        </child>
+        <child>
+          <object class="GtkMenuItem" id="menuitem4">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="use_action_appearance">False</property>
+            <property name="label" translatable="yes">_Help</property>
+            <property name="use_underline">True</property>
+            <child type="submenu">
+              <object class="GtkMenu" id="menu3">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <child>
+                  <object class="GtkImageMenuItem" id="imagemenuitem10">
+                    <property name="label">gtk-about</property>
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="use_action_appearance">False</property>
+                    <property name="use_underline">True</property>
+                    <property name="use_stock">True</property>
+                  </object>
+                </child>
+              </object>
+            </child>
+          </object>
+        </child>
+      </object>
+    </child>
+  </object>
+</interface>
diff --git a/testsuite/a11y/menus.txt b/testsuite/a11y/menus.txt
new file mode 100644 (file)
index 0000000..7681245
--- /dev/null
@@ -0,0 +1,134 @@
+window1
+  "frame"
+  index: 0
+  state: enabled resizable sensitive showing visible
+  toolkit: gtk
+  <AtkComponent>
+  layer: window
+  alpha: 1
+  menubar1
+    "menu bar"
+    parent: window1
+    index: 0
+    state: enabled sensitive showing visible
+    toolkit: gtk
+    <AtkComponent>
+    layer: widget
+    alpha: 1
+    <AtkSelection>
+    menuitem1
+      "menu"
+      parent: menubar1
+      index: 0
+      name: File
+      state: enabled selectable sensitive showing visible
+      toolkit: gtk
+      <AtkComponent>
+      layer: popup
+      alpha: 1
+      <AtkAction>
+      action 0 name: click
+      action 0 description: Clicks the menuitem
+      action 0 keybinding: <Alt>f;<Alt>f;
+      <AtkSelection>
+      imagemenuitem1
+        "menu item"
+        parent: menuitem1
+        index: 0
+        name: New
+        state: enabled selectable sensitive visible
+        toolkit: gtk
+        <AtkComponent>
+        layer: popup
+        alpha: 1
+        <AtkAction>
+        action 0 name: click
+        action 0 description: Clicks the menuitem
+        action 0 keybinding: n;<Alt>f:n;
+        <AtkSelection>
+      imagemenuitem2
+        "menu item"
+        parent: menuitem1
+        index: 1
+        name: bla
+        state: enabled selectable sensitive visible
+        toolkit: gtk
+        <AtkComponent>
+        layer: popup
+        alpha: 1
+        <AtkAction>
+        action 0 name: click
+        action 0 description: Clicks the menuitem
+        <AtkSelection>
+      separatormenuitem1
+        "separator"
+        parent: menuitem1
+        index: 2
+        state: enabled selectable sensitive visible
+        toolkit: gtk
+        <AtkComponent>
+        layer: popup
+        alpha: 1
+        <AtkAction>
+        <AtkSelection>
+      menuitem3
+        "check menu item"
+        parent: menuitem1
+        index: 3
+        name: check item
+        state: enabled selectable sensitive visible
+        toolkit: gtk
+        <AtkComponent>
+        layer: popup
+        alpha: 1
+        <AtkAction>
+        action 0 name: click
+        action 0 description: Clicks the menuitem
+        <AtkSelection>
+    menuitem2
+      "menu"
+      parent: menubar1
+      index: 1
+      name: Edit
+      state: enabled selectable sensitive showing visible
+      toolkit: gtk
+      <AtkComponent>
+      layer: popup
+      alpha: 1
+      <AtkAction>
+      action 0 name: click
+      action 0 description: Clicks the menuitem
+      action 0 keybinding: <Alt>e;<Alt>e;
+      <AtkSelection>
+      menuitem4
+        "radio menu item"
+        parent: menuitem2
+        index: 0
+        name: radio1
+        member-of: menuitem5
+                   menuitem4
+        state: enabled selectable sensitive visible
+        toolkit: gtk
+        <AtkComponent>
+        layer: popup
+        alpha: 1
+        <AtkAction>
+        action 0 name: click
+        action 0 description: Clicks the menuitem
+        <AtkSelection>
+      menuitem5
+        "radio menu item"
+        parent: menuitem2
+        index: 1
+        name: radio2
+        member-of: menuitem5
+                   menuitem4
+        state: enabled selectable sensitive visible
+        toolkit: gtk
+        <AtkComponent>
+        layer: popup
+        alpha: 1
+        <AtkAction>
+        action 0 name: click
+        action 0 description: Clicks the menuitem
+        <AtkSelection>
diff --git a/testsuite/a11y/menus.ui b/testsuite/a11y/menus.ui
new file mode 100644 (file)
index 0000000..5b926f3
--- /dev/null
@@ -0,0 +1,106 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+  <!-- interface-requires gtk+ 3.0 -->
+  <object class="GtkImage" id="image1">
+    <property name="visible">True</property>
+    <property name="can_focus">False</property>
+    <property name="stock">gtk-go-up</property>
+    <property name="icon-size">5</property>
+  </object>
+  <object class="GtkWindow" id="window1">
+    <property name="can_focus">False</property>
+    <child>
+      <object class="GtkMenuBar" id="menubar1">
+        <property name="visible">True</property>
+        <property name="can_focus">False</property>
+        <child>
+          <object class="GtkMenuItem" id="menuitem1">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="use_action_appearance">False</property>
+            <property name="label" translatable="yes">_File</property>
+            <property name="use_underline">True</property>
+            <child type="submenu">
+              <object class="GtkMenu" id="menu1">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <child>
+                  <object class="GtkImageMenuItem" id="imagemenuitem1">
+                    <property name="label">gtk-new</property>
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="use_action_appearance">False</property>
+                    <property name="use_underline">True</property>
+                    <property name="use_stock">True</property>
+                  </object>
+                </child>
+                <child>
+                  <object class="GtkImageMenuItem" id="imagemenuitem2">
+                    <property name="label" translatable="yes">bla</property>
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="use_action_appearance">False</property>
+                    <property name="image">image1</property>
+                    <property name="use_stock">False</property>
+                  </object>
+                </child>
+                <child>
+                  <object class="GtkSeparatorMenuItem" id="separatormenuitem1">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="use_action_appearance">False</property>
+                  </object>
+                </child>
+                <child>
+                  <object class="GtkCheckMenuItem" id="menuitem3">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="use_action_appearance">False</property>
+                    <property name="label" translatable="yes">check item</property>
+                    <property name="use_underline">True</property>
+                  </object>
+                </child>
+              </object>
+            </child>
+          </object>
+        </child>
+        <child>
+          <object class="GtkMenuItem" id="menuitem2">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="use_action_appearance">False</property>
+            <property name="label" translatable="yes">_Edit</property>
+            <property name="use_underline">True</property>
+            <child type="submenu">
+              <object class="GtkMenu" id="menu2">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <child>
+                  <object class="GtkRadioMenuItem" id="menuitem4">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="use_action_appearance">False</property>
+                    <property name="label" translatable="yes">radio1</property>
+                    <property name="use_underline">True</property>
+                    <property name="draw_as_radio">True</property>
+                  </object>
+                </child>
+                <child>
+                  <object class="GtkRadioMenuItem" id="menuitem5">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="use_action_appearance">False</property>
+                    <property name="label" translatable="yes">radio2</property>
+                    <property name="use_underline">True</property>
+                    <property name="draw_as_radio">True</property>
+                    <property name="group">menuitem4</property>
+                  </object>
+                </child>
+              </object>
+            </child>
+          </object>
+        </child>
+      </object>
+    </child>
+  </object>
+</interface>
diff --git a/testsuite/a11y/messagedialog.txt b/testsuite/a11y/messagedialog.txt
new file mode 100644 (file)
index 0000000..1d4275e
--- /dev/null
@@ -0,0 +1,135 @@
+window1
+  "alert"
+  index: 0
+  name: Information
+  state: enabled sensitive showing visible
+  toolkit: gtk
+  <AtkComponent>
+  layer: window
+  alpha: 1
+  dialog-vbox1
+    "filler"
+    parent: window1
+    index: 0
+    state: enabled sensitive showing vertical visible
+    toolkit: gtk
+    <AtkComponent>
+    layer: widget
+    alpha: 1
+    box
+      "filler"
+      parent: dialog-vbox1
+      index: 0
+      state: enabled horizontal sensitive showing visible
+      toolkit: gtk
+      <AtkComponent>
+      layer: widget
+      alpha: 1
+      image
+        "icon"
+        parent: box
+        index: 0
+        state: enabled sensitive showing visible
+        toolkit: gtk
+        <AtkComponent>
+        layer: widget
+        alpha: 1
+        <AtkImage>
+        image size: 48 x 48
+        image description: (null)
+      message_area
+        "filler"
+        parent: box
+        index: 1
+        state: enabled sensitive showing vertical visible
+        toolkit: gtk
+        <AtkComponent>
+        layer: widget
+        alpha: 1
+        label
+          "label"
+          parent: message_area
+          index: 0
+          name: Information
+          state: enabled focusable multi-line sensitive showing visible
+          toolkit: gtk
+          <AtkComponent>
+          layer: widget
+          alpha: 1
+          <AtkText>
+          text: Information
+          character count: 11
+          caret offset: 0
+          default attributes: bg-color: <omitted>
+                              bg-full-height: 0
+                              direction: <omitted>
+                              editable: false
+                              family-name: <omitted>
+                              fg-color: <omitted>
+                              indent: 0
+                              invisible: false
+                              justification: left
+                              language: <omitted>
+                              left-margin: 0
+                              pixels-above-lines: 0
+                              pixels-below-lines: 0
+                              pixels-inside-wrap: 0
+                              right-margin: 0
+                              rise: 0
+                              scale: 1
+                              size: <omitted>
+                              stretch: <omitted>
+                              strikethrough: false
+                              style: <omitted>
+                              underline: none
+                              variant: <omitted>
+                              weight: <omitted>
+                              wrap-mode: word
+        secondary_label
+          "label"
+          parent: message_area
+          index: 1
+          name: More Information
+          state: enabled focusable multi-line sensitive showing visible
+          toolkit: gtk
+          <AtkComponent>
+          layer: widget
+          alpha: 1
+          <AtkText>
+          text: More Information
+          character count: 16
+          caret offset: 0
+          default attributes: bg-color: <omitted>
+                              bg-full-height: 0
+                              direction: <omitted>
+                              editable: false
+                              family-name: <omitted>
+                              fg-color: <omitted>
+                              indent: 0
+                              invisible: false
+                              justification: left
+                              language: <omitted>
+                              left-margin: 0
+                              pixels-above-lines: 0
+                              pixels-below-lines: 0
+                              pixels-inside-wrap: 0
+                              right-margin: 0
+                              rise: 0
+                              scale: 1
+                              size: <omitted>
+                              stretch: <omitted>
+                              strikethrough: false
+                              style: <omitted>
+                              underline: none
+                              variant: <omitted>
+                              weight: <omitted>
+                              wrap-mode: word
+    dialog-action_area1
+      "filler"
+      parent: dialog-vbox1
+      index: 1
+      state: enabled horizontal sensitive showing visible
+      toolkit: gtk
+      <AtkComponent>
+      layer: widget
+      alpha: 1
diff --git a/testsuite/a11y/messagedialog.ui b/testsuite/a11y/messagedialog.ui
new file mode 100644 (file)
index 0000000..a6a080e
--- /dev/null
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+  <!-- interface-requires gtk+ 3.0 -->
+  <object class="GtkMessageDialog" id="window1">
+    <property name="visible">True</property>
+    <property name="message-type">info</property>
+    <property name="text" translatable="yes">Information</property>
+    <property name="secondary-text" translatable="yes">More Information</property>
+  </object>
+</interface>
diff --git a/testsuite/a11y/mnemonic.txt b/testsuite/a11y/mnemonic.txt
new file mode 100644 (file)
index 0000000..7ca52b9
--- /dev/null
@@ -0,0 +1,100 @@
+window1
+  "window"
+  index: 0
+  state: enabled resizable sensitive showing visible
+  toolkit: gtk
+  <AtkComponent>
+  layer: window
+  alpha: 1
+  box1
+    "filler"
+    parent: window1
+    index: 0
+    state: enabled horizontal sensitive
+    toolkit: gtk
+    <AtkComponent>
+    layer: widget
+    alpha: 1
+    label1
+      "label"
+      parent: box1
+      index: 0
+      name: Entry:
+      label-for: entry1
+      state: enabled multi-line sensitive visible
+      toolkit: gtk
+      <AtkComponent>
+      layer: widget
+      alpha: 1
+      <AtkText>
+      text: Entry:
+      character count: 6
+      caret offset: 0
+      default attributes: bg-color: <omitted>
+                          bg-full-height: 0
+                          direction: <omitted>
+                          editable: false
+                          family-name: <omitted>
+                          fg-color: <omitted>
+                          indent: 0
+                          invisible: false
+                          justification: left
+                          language: <omitted>
+                          left-margin: 0
+                          pixels-above-lines: 0
+                          pixels-below-lines: 0
+                          pixels-inside-wrap: 0
+                          right-margin: 0
+                          rise: 0
+                          scale: 1
+                          size: <omitted>
+                          stretch: <omitted>
+                          strikethrough: false
+                          style: <omitted>
+                          underline: none
+                          variant: <omitted>
+                          weight: <omitted>
+                          wrap-mode: word
+    entry1
+      "text"
+      parent: box1
+      index: 1
+      labelled-by: label1
+      state: editable enabled focusable sensitive single-line visible
+      toolkit: gtk
+      <AtkComponent>
+      layer: widget
+      alpha: 1
+      <AtkText>
+      text: text
+      character count: 4
+      caret offset: 0
+      default attributes: bg-color: <omitted>
+                          bg-full-height: 0
+                          direction: <omitted>
+                          editable: false
+                          family-name: <omitted>
+                          fg-color: <omitted>
+                          indent: 0
+                          invisible: false
+                          justification: left
+                          language: <omitted>
+                          left-margin: 0
+                          pixels-above-lines: 0
+                          pixels-below-lines: 0
+                          pixels-inside-wrap: 0
+                          right-margin: 0
+                          rise: 0
+                          scale: 1
+                          size: <omitted>
+                          stretch: <omitted>
+                          strikethrough: false
+                          style: <omitted>
+                          underline: none
+                          variant: <omitted>
+                          weight: <omitted>
+                          wrap-mode: word
+      <AtkAction>
+      action 0 name: activate
+      action 0 description: Activates the entry
+      action 0 keybinding: <Alt>e
diff --git a/testsuite/a11y/mnemonic.ui b/testsuite/a11y/mnemonic.ui
new file mode 100644 (file)
index 0000000..443f2cd
--- /dev/null
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+  <!-- interface-requires gtk+ 3.0 -->
+  <object class="GtkWindow" id="window1">
+    <property name="can_focus">False</property>
+    <property name="type">popup</property>
+    <child>
+      <object class="GtkBox" id="box1">
+        <child>
+          <object class="GtkLabel" id="label1">
+            <property name="label" translatable="yes">_Entry:</property>
+            <property name="visible">True</property>
+            <property name="use_underline">True</property>
+            <property name="mnemonic_widget">entry1</property>
+          </object>
+        </child>
+        <child>
+          <object class="GtkEntry" id="entry1">
+            <property name="text" translatable="yes">text</property>
+            <property name="visible">True</property>
+          </object>
+        </child>
+      </object>
+    </child>
+  </object>
+</interface>
diff --git a/testsuite/a11y/notebook.txt b/testsuite/a11y/notebook.txt
new file mode 100644 (file)
index 0000000..cc9e5ff
--- /dev/null
@@ -0,0 +1,69 @@
+window1
+  "window"
+  index: 0
+  state: enabled resizable sensitive showing visible
+  toolkit: gtk
+  <AtkComponent>
+  layer: window
+  alpha: 1
+  notebook1
+    "page tab list"
+    parent: window1
+    index: 0
+    state: enabled focusable sensitive showing visible
+    toolkit: gtk
+    <AtkComponent>
+    layer: widget
+    alpha: 1
+    <AtkSelection>
+    selected children: unnamed-GtkNotebookPageAccessible-0
+    unnamed-GtkNotebookPageAccessible-0
+      "page tab"
+      parent: notebook1
+      index: 0
+      name: Tab 1
+      state: enabled multi-line selectable selected sensitive showing visible
+      <AtkComponent>
+      layer: widget
+      alpha: 1
+      page1
+        "push button"
+        index: 0
+        name: Yes
+        state: enabled focusable sensitive showing visible
+        toolkit: gtk
+        <AtkComponent>
+        layer: widget
+        alpha: 1
+        <AtkImage>
+        image size: 20 x 20
+        image description: (null)
+        <AtkAction>
+        action 0 name: click
+        action 0 description: Clicks the button
+        action 0 keybinding: <Alt>y
+    unnamed-GtkNotebookPageAccessible-1
+      "page tab"
+      parent: notebook1
+      index: 1
+      name: Tab 2
+      state: enabled multi-line selectable sensitive showing visible
+      <AtkComponent>
+      layer: widget
+      alpha: 1
+      page2
+        "push button"
+        index: 0
+        name: No
+        state: enabled focusable sensitive visible
+        toolkit: gtk
+        <AtkComponent>
+        layer: widget
+        alpha: 1
+        <AtkImage>
+        image size: 20 x 20
+        image description: (null)
+        <AtkAction>
+        action 0 name: click
+        action 0 description: Clicks the button
+        action 0 keybinding: <Alt>n
diff --git a/testsuite/a11y/notebook.ui b/testsuite/a11y/notebook.ui
new file mode 100644 (file)
index 0000000..95d1328
--- /dev/null
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+  <!-- interface-requires gtk+ 3.0 -->
+  <object class="GtkWindow" id="window1">
+    <property name="can_focus">False</property>
+    <property name="type">popup</property>
+    <child>
+      <object class="GtkNotebook" id="notebook1">
+        <property name="visible">True</property>
+        <child>
+          <object class="GtkButton" id="page1">
+            <property name="label">gtk-yes</property>
+            <property name="use_stock">True</property>
+            <property name="visible">True</property>
+          </object>
+        </child>
+        <child type="tab">
+          <object class="GtkLabel" id="tab1">
+            <property name="label" translatable="yes">Tab 1</property>
+            <property name="visible">True</property>
+          </object>
+        </child>
+        <child>
+          <object class="GtkButton" id="page2">
+            <property name="label">gtk-no</property>
+            <property name="use_stock">True</property>
+            <property name="visible">True</property>
+          </object>
+        </child>
+        <child type="tab">
+          <object class="GtkLabel" id="tab2">
+            <property name="label" translatable="yes">Tab 2</property>
+            <property name="visible">True</property>
+          </object>
+        </child>
+      </object>
+    </child>
+  </object>
+</interface>
diff --git a/testsuite/a11y/paned.txt b/testsuite/a11y/paned.txt
new file mode 100644 (file)
index 0000000..c1eecc7
--- /dev/null
@@ -0,0 +1,100 @@
+window1
+  "window"
+  index: 0
+  state: enabled resizable sensitive showing visible
+  toolkit: gtk
+  <AtkComponent>
+  layer: window
+  alpha: 1
+  paned1
+    "split pane"
+    parent: window1
+    index: 0
+    state: enabled focusable horizontal sensitive
+    toolkit: gtk
+    <AtkComponent>
+    layer: widget
+    alpha: 1
+    <AtkValue>
+    minimum value: 0
+    maximum value: 0
+    current value: 0
+    minimum increment: 0
+    label1
+      "label"
+      parent: paned1
+      index: 0
+      name: Left
+      state: enabled multi-line sensitive visible
+      toolkit: gtk
+      <AtkComponent>
+      layer: widget
+      alpha: 1
+      <AtkText>
+      text: Left
+      character count: 4
+      caret offset: 0
+      default attributes: bg-color: <omitted>
+                          bg-full-height: 0
+                          direction: <omitted>
+                          editable: false
+                          family-name: <omitted>
+                          fg-color: <omitted>
+                          indent: 0
+                          invisible: false
+                          justification: left
+                          language: <omitted>
+                          left-margin: 0
+                          pixels-above-lines: 0
+                          pixels-below-lines: 0
+                          pixels-inside-wrap: 0
+                          right-margin: 0
+                          rise: 0
+                          scale: 1
+                          size: <omitted>
+                          stretch: <omitted>
+                          strikethrough: false
+                          style: <omitted>
+                          underline: none
+                          variant: <omitted>
+                          weight: <omitted>
+                          wrap-mode: word
+    label2
+      "label"
+      parent: paned1
+      index: 1
+      name: Right
+      state: enabled multi-line sensitive visible
+      toolkit: gtk
+      <AtkComponent>
+      layer: widget
+      alpha: 1
+      <AtkText>
+      text: Right
+      character count: 5
+      caret offset: 0
+      default attributes: bg-color: <omitted>
+                          bg-full-height: 0
+                          direction: <omitted>
+                          editable: false
+                          family-name: <omitted>
+                          fg-color: <omitted>
+                          indent: 0
+                          invisible: false
+                          justification: left
+                          language: <omitted>
+                          left-margin: 0
+                          pixels-above-lines: 0
+                          pixels-below-lines: 0
+                          pixels-inside-wrap: 0
+                          right-margin: 0
+                          rise: 0
+                          scale: 1
+                          size: <omitted>
+                          stretch: <omitted>
+                          strikethrough: false
+                          style: <omitted>
+                          underline: none
+                          variant: <omitted>
+                          weight: <omitted>
+                          wrap-mode: word
diff --git a/testsuite/a11y/paned.ui b/testsuite/a11y/paned.ui
new file mode 100644 (file)
index 0000000..2126257
--- /dev/null
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+  <!-- interface-requires gtk+ 3.0 -->
+  <object class="GtkWindow" id="window1">
+    <property name="can_focus">False</property>
+    <property name="type">popup</property>
+    <child>
+      <object class="GtkPaned" id="paned1">
+        <child>
+          <object class="GtkLabel" id="label1">
+            <property name="label" translatable="yes">Left</property>
+            <property name="visible">True</property>
+          </object>
+        </child>
+        <child>
+          <object class="GtkLabel" id="label2">
+            <property name="label" translatable="yes">Right</property>
+            <property name="visible">True</property>
+          </object>
+        </child>
+      </object>
+    </child>
+  </object>
+</interface>
diff --git a/testsuite/a11y/pickers.txt b/testsuite/a11y/pickers.txt
new file mode 100644 (file)
index 0000000..237b1fc
--- /dev/null
@@ -0,0 +1,70 @@
+window1
+  "window"
+  index: 0
+  state: enabled resizable sensitive showing visible
+  toolkit: gtk
+  <AtkComponent>
+  layer: window
+  alpha: 1
+  grid1
+    "panel"
+    parent: window1
+    index: 0
+    state: enabled horizontal sensitive showing visible
+    toolkit: gtk
+    <AtkComponent>
+    layer: widget
+    alpha: 1
+    button3
+      "push button"
+      parent: grid1
+      index: 0
+      name: Sans
+      state: enabled focusable sensitive showing visible
+      toolkit: gtk
+      <AtkComponent>
+      layer: widget
+      alpha: 1
+      <AtkImage>
+      image size: -1 x -1
+      image description: (null)
+      <AtkAction>
+      action 0 name: click
+      action 0 description: Clicks the button
+    button2
+      "push button"
+      parent: grid1
+      index: 1
+      state: enabled focusable sensitive showing visible
+      toolkit: gtk
+      <AtkComponent>
+      layer: widget
+      alpha: 1
+      <AtkImage>
+      image size: -1 x -1
+      image description: (null)
+      <AtkAction>
+      action 0 name: click
+      action 0 description: Clicks the button
+    button1
+      "combo box"
+      parent: grid1
+      index: 2
+      state: enabled sensitive showing visible
+      toolkit: gtk
+      <AtkComponent>
+      layer: widget
+      alpha: 1
+      <AtkAction>
+      action 0 name: press
+      action 0 description: Presses the combobox
+      unnamed-GtkMenuAccessible-0
+        "menu"
+        parent: button1
+        index: 0
+        state: enabled sensitive
+        toolkit: gtk
+        <AtkComponent>
+        layer: popup
+        alpha: 1
+        <AtkSelection>
diff --git a/testsuite/a11y/pickers.ui b/testsuite/a11y/pickers.ui
new file mode 100644 (file)
index 0000000..a540fa1
--- /dev/null
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+  <!-- interface-requires gtk+ 3.0 -->
+  <object class="GtkWindow" id="window1">
+    <property name="can_focus">False</property>
+    <property name="type">popup</property>
+    <child>
+      <object class="GtkGrid" id="grid1">
+        <property name="visible">True</property>
+        <child>
+          <object class="GtkAppChooserButton" id="button1">
+            <property name="visible">True</property>
+          </object>
+          <packing>
+            <property name="left_attach">0</property>
+            <property name="top_attach">0</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkColorButton" id="button2">
+            <property name="visible">True</property>
+          </object>
+          <packing>
+            <property name="left_attach">1</property>
+            <property name="top_attach">0</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkFontButton" id="button3">
+            <property name="visible">True</property>
+          </object>
+          <packing>
+            <property name="left_attach">2</property>
+            <property name="top_attach">0</property>
+          </packing>
+        </child>
+<!--
+        <child>
+          <object class="GtkFileChooserButton" id="button4">
+            <property name="visible">True</property>
+          </object>
+          <packing>
+            <property name="left_attach">3</property>
+            <property name="top_attach">0</property>
+          </packing>
+        </child>
+-->
+      </object>
+    </child>
+  </object>
+</interface>
diff --git a/testsuite/a11y/placeholder-text.txt b/testsuite/a11y/placeholder-text.txt
new file mode 100644 (file)
index 0000000..4ac8e1e
--- /dev/null
@@ -0,0 +1,143 @@
+window1
+  "window"
+  index: 0
+  state: enabled resizable sensitive showing visible
+  toolkit: gtk
+  <AtkComponent>
+  layer: window
+  alpha: 1
+  box1
+    "filler"
+    parent: window1
+    index: 0
+    state: enabled sensitive showing vertical visible
+    toolkit: gtk
+    <AtkComponent>
+    layer: widget
+    alpha: 1
+    entry1
+      "text"
+      parent: box1
+      index: 0
+      state: editable enabled focusable sensitive showing single-line visible
+      toolkit: gtk
+      placeholder-text: Subject or Addresses contain
+      <AtkComponent>
+      layer: widget
+      alpha: 1
+      <AtkText>
+      text: 
+      character count: 0
+      caret offset: 0
+      default attributes: bg-color: <omitted>
+                          bg-full-height: 0
+                          direction: <omitted>
+                          editable: false
+                          family-name: <omitted>
+                          fg-color: <omitted>
+                          indent: 0
+                          invisible: false
+                          justification: left
+                          language: <omitted>
+                          left-margin: 0
+                          pixels-above-lines: 0
+                          pixels-below-lines: 0
+                          pixels-inside-wrap: 0
+                          right-margin: 0
+                          rise: 0
+                          scale: 1
+                          size: <omitted>
+                          stretch: <omitted>
+                          strikethrough: false
+                          style: <omitted>
+                          underline: none
+                          variant: <omitted>
+                          weight: <omitted>
+                          wrap-mode: word
+      <AtkAction>
+      action 0 name: activate
+      action 0 description: Activates the entry
+    entry2
+      "text"
+      parent: box1
+      index: 1
+      state: editable enabled focusable sensitive showing single-line visible
+      toolkit: gtk
+      placeholder-text: Message contains
+      <AtkComponent>
+      layer: widget
+      alpha: 1
+      <AtkText>
+      text: Some text
+      character count: 9
+      caret offset: 0
+      default attributes: bg-color: <omitted>
+                          bg-full-height: 0
+                          direction: <omitted>
+                          editable: false
+                          family-name: <omitted>
+                          fg-color: <omitted>
+                          indent: 0
+                          invisible: false
+                          justification: left
+                          language: <omitted>
+                          left-margin: 0
+                          pixels-above-lines: 0
+                          pixels-below-lines: 0
+                          pixels-inside-wrap: 0
+                          right-margin: 0
+                          rise: 0
+                          scale: 1
+                          size: <omitted>
+                          stretch: <omitted>
+                          strikethrough: false
+                          style: <omitted>
+                          underline: none
+                          variant: <omitted>
+                          weight: <omitted>
+                          wrap-mode: word
+      <AtkAction>
+      action 0 name: activate
+      action 0 description: Activates the entry
+    entry3
+      "text"
+      parent: box1
+      index: 2
+      state: editable enabled focusable sensitive showing single-line visible
+      toolkit: gtk
+      placeholder-text: Body contains
+      <AtkComponent>
+      layer: widget
+      alpha: 1
+      <AtkText>
+      text: 
+      character count: 0
+      caret offset: 0
+      default attributes: bg-color: <omitted>
+                          bg-full-height: 0
+                          direction: <omitted>
+                          editable: false
+                          family-name: <omitted>
+                          fg-color: <omitted>
+                          indent: 0
+                          invisible: false
+                          justification: left
+                          language: <omitted>
+                          left-margin: 0
+                          pixels-above-lines: 0
+                          pixels-below-lines: 0
+                          pixels-inside-wrap: 0
+                          right-margin: 0
+                          rise: 0
+                          scale: 1
+                          size: <omitted>
+                          stretch: <omitted>
+                          strikethrough: false
+                          style: <omitted>
+                          underline: none
+                          variant: <omitted>
+                          weight: <omitted>
+                          wrap-mode: word
+      <AtkAction>
+      action 0 name: activate
+      action 0 description: Activates the entry
diff --git a/testsuite/a11y/placeholder-text.ui b/testsuite/a11y/placeholder-text.ui
new file mode 100644 (file)
index 0000000..4657cb5
--- /dev/null
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+  <!-- interface-requires gtk+ 3.0 -->
+  <object class="GtkWindow" id="window1">
+    <property name="can_focus">False</property>
+    <property name="type">popup</property>
+    <child>
+      <object class="GtkBox" id="box1">
+        <property name="visible">True</property>
+        <property name="can_focus">False</property>
+        <property name="orientation">vertical</property>
+        <child>
+          <object class="GtkEntry" id="entry1">
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="invisible_char">●</property>
+            <property name="invisible_char_set">True</property>
+            <property name="placeholder_text">Subject or Addresses contain</property>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">True</property>
+            <property name="position">0</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkEntry" id="entry2">
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="invisible_char">●</property>
+            <property name="text" translatable="yes">Some text</property>
+            <property name="invisible_char_set">True</property>
+            <property name="placeholder_text">Message contains</property>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">True</property>
+            <property name="position">1</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkEntry" id="entry3">
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="has_focus">True</property>
+            <property name="is_focus">True</property>
+            <property name="invisible_char">●</property>
+            <property name="invisible_char_set">True</property>
+            <property name="placeholder_text">Body contains</property>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">True</property>
+            <property name="position">2</property>
+          </packing>
+        </child>
+      </object>
+    </child>
+  </object>
+</interface>
diff --git a/testsuite/a11y/progress.txt b/testsuite/a11y/progress.txt
new file mode 100644 (file)
index 0000000..186711a
--- /dev/null
@@ -0,0 +1,22 @@
+window1
+  "window"
+  index: 0
+  state: enabled resizable sensitive showing visible
+  toolkit: gtk
+  <AtkComponent>
+  layer: window
+  alpha: 1
+  progress1
+    "progress bar"
+    parent: window1
+    index: 0
+    state: enabled horizontal sensitive showing visible
+    toolkit: gtk
+    <AtkComponent>
+    layer: widget
+    alpha: 1
+    <AtkValue>
+    minimum value: 0.000000
+    maximum value: 1.000000
+    current value: 0.500000
+    minimum increment: 0.000000
diff --git a/testsuite/a11y/progress.ui b/testsuite/a11y/progress.ui
new file mode 100644 (file)
index 0000000..f34c13b
--- /dev/null
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+  <!-- interface-requires gtk+ 3.0 -->
+  <object class="GtkWindow" id="window1">
+    <property name="can_focus">False</property>
+    <property name="type">popup</property>
+    <child>
+      <object class="GtkProgressBar" id="progress1">
+        <property name="visible">True</property>
+        <property name="fraction">0.5</property>
+        <property name="text">Good progress!</property>
+        <property name="show-text">True</property>
+      </object>
+    </child>
+  </object>
+</interface>
diff --git a/testsuite/a11y/range.txt b/testsuite/a11y/range.txt
new file mode 100644 (file)
index 0000000..4a26c5f
--- /dev/null
@@ -0,0 +1,46 @@
+window1
+  "window"
+  index: 0
+  state: enabled resizable sensitive showing visible
+  toolkit: gtk
+  <AtkComponent>
+  layer: window
+  alpha: 1
+  grid1
+    "panel"
+    parent: window1
+    index: 0
+    state: enabled horizontal sensitive showing visible
+    toolkit: gtk
+    <AtkComponent>
+    layer: widget
+    alpha: 1
+    scrollbar1
+      "scroll bar"
+      parent: grid1
+      index: 0
+      state: enabled focusable horizontal sensitive showing visible
+      toolkit: gtk
+      <AtkComponent>
+      layer: widget
+      alpha: 1
+      <AtkValue>
+      minimum value: 0.500000
+      maximum value: 99.500000
+      current value: 45.500000
+      minimum increment: 0.500000
+    scale1
+      "slider"
+      parent: grid1
+      index: 1
+      description: 45.5
+      state: enabled focusable horizontal sensitive showing visible
+      toolkit: gtk
+      <AtkComponent>
+      layer: widget
+      alpha: 1
+      <AtkValue>
+      minimum value: 0.500000
+      maximum value: 99.500000
+      current value: 45.500000
+      minimum increment: 0.500000
diff --git a/testsuite/a11y/range.ui b/testsuite/a11y/range.ui
new file mode 100644 (file)
index 0000000..9c1ac45
--- /dev/null
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+  <!-- interface-requires gtk+ 3.0 -->
+  <object class="GtkAdjustment" id="adjustment1">
+    <property name="lower">0.5</property>
+    <property name="upper">99.5</property>
+    <property name="page-size">0</property>
+    <property name="value">45.5</property>
+    <property name="step-increment">0.5</property>
+    <property name="page-increment">5.0</property>
+  </object>
+  <object class="GtkWindow" id="window1">
+    <property name="can_focus">False</property>
+    <property name="type">popup</property>
+    <child>
+      <object class="GtkGrid" id="grid1">
+        <property name="visible">True</property>
+        <child>
+          <object class="GtkScale" id="scale1">
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="adjustment">adjustment1</property>
+          </object>
+          <packing>
+            <property name="left_attach">0</property>
+            <property name="top_attach">0</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkScrollbar" id="scrollbar1">
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="adjustment">adjustment1</property>
+          </object>
+          <packing>
+            <property name="left_attach">1</property>
+            <property name="top_attach">0</property>
+          </packing>
+        </child>
+      </object>
+    </child>
+  </object>
+</interface>
diff --git a/testsuite/a11y/scale-drawvalue.txt b/testsuite/a11y/scale-drawvalue.txt
new file mode 100644 (file)
index 0000000..e64b935
--- /dev/null
@@ -0,0 +1,23 @@
+window1
+  "frame"
+  index: 0
+  state: enabled resizable sensitive showing visible
+  toolkit: gtk
+  <AtkComponent>
+  layer: window
+  alpha: 1
+  scale1
+    "slider"
+    parent: window1
+    index: 0
+    description: -42.0
+    state: enabled focusable horizontal sensitive showing visible
+    toolkit: gtk
+    <AtkComponent>
+    layer: widget
+    alpha: 1
+    <AtkValue>
+    minimum value: -100.000000
+    maximum value: 100.000000
+    current value: -42.000000
+    minimum increment: 1.000000
diff --git a/testsuite/a11y/scale-drawvalue.ui b/testsuite/a11y/scale-drawvalue.ui
new file mode 100644 (file)
index 0000000..ad6abbe
--- /dev/null
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+  <!-- interface-requires gtk+ 3.0 -->
+  <object class="GtkAdjustment" id="adjustment1">
+    <property name="lower">-100</property>
+    <property name="upper">100</property>
+    <property name="value">-42</property>
+    <property name="step_increment">1</property>
+    <property name="page_increment">10</property>
+  </object>
+  <object class="GtkWindow" id="window1">
+    <property name="can_focus">False</property>
+    <child>
+      <object class="GtkScale" id="scale1">
+        <property name="width-request">100</property>
+        <property name="visible">True</property>
+        <property name="can_focus">True</property>
+        <property name="adjustment">adjustment1</property>
+        <property name="round_digits">1</property>
+      </object>
+    </child>
+  </object>
+</interface>
diff --git a/testsuite/a11y/spinner.txt b/testsuite/a11y/spinner.txt
new file mode 100644 (file)
index 0000000..dd7c9f0
--- /dev/null
@@ -0,0 +1,22 @@
+window1
+  "window"
+  index: 0
+  state: enabled resizable sensitive showing visible
+  toolkit: gtk
+  <AtkComponent>
+  layer: window
+  alpha: 1
+  spinner1
+    "animation"
+    parent: window1
+    index: 0
+    name: Spinner
+    description: Provides visual indication of progress
+    state: enabled sensitive showing visible
+    toolkit: gtk
+    <AtkComponent>
+    layer: widget
+    alpha: 1
+    <AtkImage>
+    image size: 12 x 12
+    image description: (null)
diff --git a/testsuite/a11y/spinner.ui b/testsuite/a11y/spinner.ui
new file mode 100644 (file)
index 0000000..3873564
--- /dev/null
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+  <!-- interface-requires gtk+ 3.0 -->
+  <object class="GtkWindow" id="window1">
+    <property name="can_focus">False</property>
+    <property name="type">popup</property>
+    <child>
+      <object class="GtkSpinner" id="spinner1">
+        <property name="visible">True</property>
+        <property name="active">True</property>
+      </object>
+    </child>
+  </object>
+</interface>
diff --git a/testsuite/a11y/statusbar.txt b/testsuite/a11y/statusbar.txt
new file mode 100644 (file)
index 0000000..f98fc9a
--- /dev/null
@@ -0,0 +1,18 @@
+window1
+  "window"
+  index: 0
+  state: enabled resizable sensitive showing visible
+  toolkit: gtk
+  <AtkComponent>
+  layer: window
+  alpha: 1
+  statusbar1
+    "statusbar"
+    parent: window1
+    index: 0
+    name: 
+    state: enabled horizontal sensitive showing visible
+    toolkit: gtk
+    <AtkComponent>
+    layer: widget
+    alpha: 1
diff --git a/testsuite/a11y/statusbar.ui b/testsuite/a11y/statusbar.ui
new file mode 100644 (file)
index 0000000..bc635bc
--- /dev/null
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+  <!-- interface-requires gtk+ 3.0 -->
+  <object class="GtkWindow" id="window1">
+    <property name="can_focus">False</property>
+    <property name="type">popup</property>
+    <child>
+      <object class="GtkStatusbar" id="statusbar1">
+        <property name="visible">True</property>
+      </object>
+    </child>
+  </object>
+</interface>
diff --git a/testsuite/a11y/testfocus.c b/testsuite/a11y/testfocus.c
new file mode 100644 (file)
index 0000000..c438f6d
--- /dev/null
@@ -0,0 +1,117 @@
+#include <gtk/gtk.h>
+
+static const gchar *
+get_name (gpointer obj)
+{
+  GtkWidget *widget;
+  if (obj == NULL)
+    return "(nil)";
+  else if (GTK_IS_WIDGET (obj))
+    widget = GTK_WIDGET (obj);
+  else if (GTK_IS_ACCESSIBLE (obj))
+    widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (obj));
+  else
+    return "OOPS";
+  if (GTK_IS_BUILDABLE (widget))
+    return gtk_buildable_get_name (GTK_BUILDABLE (widget));
+  else
+    return G_OBJECT_TYPE_NAME (widget);
+}
+
+static gboolean
+compare_focus (gpointer data)
+{
+  AtkObject *atk_focus;
+  AtkObject *gtk_focus;
+  GtkWidget *focus_widget;
+  GList *list, *l;
+
+  atk_focus = atk_get_focus_object ();
+
+  focus_widget = NULL;
+  list = gtk_window_list_toplevels ();
+  for (l = list; l; l = l->next)
+    {
+      GtkWindow *w = l->data;
+      if (gtk_window_is_active (w))
+        {
+          focus_widget = gtk_window_get_focus (w);
+          break;
+        }
+    }
+  g_list_free (list);
+
+  if (GTK_IS_WIDGET (focus_widget))
+    gtk_focus = gtk_widget_get_accessible (focus_widget);
+  else
+    gtk_focus = NULL;
+
+  if (gtk_focus != atk_focus)
+    g_print ("gtk focus: %s != atk focus: %s\n",
+             get_name (gtk_focus), get_name (atk_focus));
+
+  return G_SOURCE_CONTINUE;
+}
+
+static void
+notify_cb (GObject *obj, GParamSpec *pspec, gpointer data)
+{
+  gboolean value;
+
+  if (g_strcmp0 (pspec->name, "has-focus") != 0)
+    return;
+
+  g_object_get (obj, "has-focus", &value, NULL);
+  g_print ("widget %s %p has-focus -> %d\n", get_name (obj), obj, value);
+}
+
+static void
+state_change_cb (AtkObject *obj, const gchar *name, gboolean state_set)
+{
+  AtkStateSet *set;
+
+  set = atk_object_ref_state_set (obj);
+  g_print ("accessible %s %p focused -> %d\n", get_name (obj), obj,
+           atk_state_set_contains_state (set, ATK_STATE_FOCUSED));
+  g_object_unref (set);
+}
+
+int
+main (int argc, char *argv[])
+{
+  GtkBuilder *builder;
+  GtkWidget *window;
+  GSList *o, *l;
+  GtkWidget *widget;
+  AtkObject *accessible;
+
+  gtk_init (&argc, &argv);
+
+  builder = gtk_builder_new ();
+  gtk_builder_add_from_file (builder, argv[1], NULL);
+
+  window = (GtkWidget *)gtk_builder_get_object (builder, "window1");
+
+  o = gtk_builder_get_objects (builder);
+  for (l = o; l;l = l->next)
+    {
+       if (!GTK_IS_WIDGET (l->data))
+         continue;
+
+       widget = l->data;
+       g_signal_connect (widget, "notify::has-focus", G_CALLBACK (notify_cb), NULL);
+       accessible = gtk_widget_get_accessible (widget);
+       g_signal_connect (accessible, "state-change::focused", G_CALLBACK (state_change_cb), NULL);
+
+    }
+  g_slist_free (o);
+
+  g_timeout_add (100, compare_focus, NULL);
+
+  gtk_widget_show_all (window);
+
+  gtk_main ();
+
+  return 0;
+}
+
diff --git a/testsuite/a11y/text.c b/testsuite/a11y/text.c
new file mode 100644 (file)
index 0000000..c18c823
--- /dev/null
@@ -0,0 +1,1045 @@
+/*
+ * Copyright (C) 2011 Red Hat Inc.
+ *
+ * Author:
+ *      Matthias Clasen <mclasen@redhat.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <gtk/gtk.h>
+#include <string.h>
+
+static void
+set_text (GtkWidget   *widget,
+          const gchar *text)
+{
+  if (GTK_IS_LABEL (widget))
+    gtk_label_set_text (GTK_LABEL (widget), text);
+  else if (GTK_IS_ENTRY (widget))
+    gtk_entry_set_text (GTK_ENTRY (widget), text);
+  else if (GTK_IS_TEXT_VIEW (widget))
+    gtk_text_buffer_set_text (gtk_text_view_get_buffer (GTK_TEXT_VIEW (widget)), text, -1);
+  else
+    g_assert_not_reached ();
+}
+
+static void
+test_basic (GtkWidget *widget)
+{
+  AtkText *atk_text;
+  const gchar *text = "Text goes here";
+  gchar *ret;
+  gint count;
+  gunichar c;
+
+  atk_text = ATK_TEXT (gtk_widget_get_accessible (widget));
+
+  set_text (widget, text);
+  ret = atk_text_get_text (atk_text, 5, 9);
+  g_assert_cmpstr (ret, ==, "goes");
+  g_free (ret);
+
+  ret = atk_text_get_text (atk_text, 0, 14);
+  g_assert_cmpstr (ret, ==, text);
+  g_free (ret);
+
+  ret = atk_text_get_text (atk_text, 0, -1);
+  g_assert_cmpstr (ret, ==, text);
+  g_free (ret);
+
+  count = atk_text_get_character_count (atk_text);
+  g_assert_cmpint (count, ==, g_utf8_strlen (text, -1));
+
+  c = atk_text_get_character_at_offset (atk_text, 0);
+  g_assert_cmpint (c, ==, 'T');
+
+  c = atk_text_get_character_at_offset (atk_text, 13);
+  g_assert_cmpint (c, ==, 'e');
+}
+
+typedef struct {
+  gint count;
+  gint position;
+  gint length;
+} SignalData;
+
+static void
+text_deleted (AtkText *atk_text, gint position, gint length, SignalData *data)
+{
+  data->count++;
+  data->position = position;
+  data->length = length;
+}
+
+static void
+text_inserted (AtkText *atk_text, gint position, gint length, SignalData *data)
+{
+  data->count++;
+  data->position = position;
+  data->length = length;
+}
+
+static void
+test_text_changed (GtkWidget *widget)
+{
+  AtkText *atk_text;
+  const gchar *text = "Text goes here";
+  const gchar *text2 = "Text again";
+  SignalData delete_data;
+  SignalData insert_data;
+
+  atk_text = ATK_TEXT (gtk_widget_get_accessible (widget));
+
+  delete_data.count = 0;
+  insert_data.count = 0;
+
+  g_signal_connect (atk_text, "text_changed::delete",
+                    G_CALLBACK (text_deleted), &delete_data);
+  g_signal_connect (atk_text, "text_changed::insert",
+                    G_CALLBACK (text_inserted), &insert_data);
+
+  set_text (widget, text);
+
+  g_assert_cmpint (delete_data.count, ==, 0);
+
+  g_assert_cmpint (insert_data.count, ==, 1);
+  g_assert_cmpint (insert_data.position, ==, 0);
+  g_assert_cmpint (insert_data.length, ==, g_utf8_strlen (text, -1));
+
+  set_text (widget, text2);
+
+  g_assert_cmpint (delete_data.count, ==, 1);
+  g_assert_cmpint (delete_data.position, ==, 0);
+  g_assert_cmpint (delete_data.length, ==, g_utf8_strlen (text, -1));
+
+  g_assert_cmpint (insert_data.count, ==, 2);
+  g_assert_cmpint (insert_data.position, ==, 0);
+  g_assert_cmpint (insert_data.length, ==, g_utf8_strlen (text2, -1));
+
+  set_text (widget, "");
+
+  g_assert_cmpint (delete_data.count, ==, 2);
+  g_assert_cmpint (delete_data.position, ==, 0);
+  g_assert_cmpint (delete_data.length, ==, g_utf8_strlen (text2, -1));
+
+  g_assert_cmpint (insert_data.count, ==, 2);
+
+  g_signal_handlers_disconnect_by_func (atk_text, G_CALLBACK (text_deleted), &delete_data);
+  g_signal_handlers_disconnect_by_func (atk_text, G_CALLBACK (text_inserted), &insert_data);
+}
+
+typedef struct {
+  gint gravity;
+  gint offset;
+  AtkTextBoundary boundary;
+  gint start;
+  gint end;
+  const gchar *word;
+} Word;
+
+#ifdef DUMP_RESULTS
+static const gchar *
+boundary (AtkTextBoundary b)
+{
+  switch (b)
+    {
+    case ATK_TEXT_BOUNDARY_CHAR:           return "ATK_TEXT_BOUNDARY_CHAR,          ";
+    case ATK_TEXT_BOUNDARY_WORD_START:     return "ATK_TEXT_BOUNDARY_WORD_START,    ";
+    case ATK_TEXT_BOUNDARY_WORD_END:       return "ATK_TEXT_BOUNDARY_WORD_END,      ";
+    case ATK_TEXT_BOUNDARY_SENTENCE_START: return "ATK_TEXT_BOUNDARY_SENTENCE_START,";
+    case ATK_TEXT_BOUNDARY_SENTENCE_END:   return "ATK_TEXT_BOUNDARY_SENTENCE_END,  ";
+    case ATK_TEXT_BOUNDARY_LINE_START:     return "ATK_TEXT_BOUNDARY_LINE_START,    ";
+    case ATK_TEXT_BOUNDARY_LINE_END:       return "ATK_TEXT_BOUNDARY_LINE_END,      ";
+    default: g_assert_not_reached ();
+    }
+}
+
+static const gchar *
+gravity (gint g)
+{
+  if (g < 0) return "before";
+  else if (g > 0) return "after";
+  else return "around";
+}
+
+const gchar *
+char_rep (gunichar c)
+{
+  static gchar out[6];
+
+  switch (c)
+    {
+      case '\n': return "\\n";
+      case 196: return "?";
+      case 214: return "?";
+      case 220: return "?";
+      default:
+        memset (out, 0, 6);
+        g_unichar_to_utf8 (c, out);
+        return out;
+    }
+}
+
+gchar *
+escape (const gchar *p)
+{
+  GString *s;
+
+  s = g_string_new ("");
+
+  while (*p)
+    {
+      if (*p == '\n')
+        g_string_append (s, "\\n");
+      else
+        g_string_append_c (s, *p);
+      p++;
+    }
+
+  return g_string_free (s, FALSE);
+}
+#endif
+
+#ifdef SHOW_TEXT_ATTRIBUTES
+static void
+show_text_attributes (PangoLayout *l)
+{
+  const PangoLogAttr *attr;
+  gint n_attrs;
+  const gchar *s;
+  gchar e;
+  const gchar *p;
+  gint i;
+  const gchar *text;
+  GSList *lines, *li;
+  glong so, eo;
+
+  printf ("\n");
+
+  text = pango_layout_get_text (l);
+  attr = pango_layout_get_log_attrs_readonly (l, &n_attrs);
+
+  p = text;
+  while (*p)
+    {
+      s = char_rep (g_utf8_get_char (p));
+      printf (" %s", s);
+      p = g_utf8_next_char (p);
+    }
+  printf ("\n");
+  p = text;
+  i = 0;
+  do
+    {
+      if (*p)
+        s = char_rep (g_utf8_get_char (p));
+      else
+        s = "";
+      if (attr[i].is_word_start && attr[i].is_word_end)
+        e = '|';
+      else if (attr[i].is_word_start)
+        e = '<';
+      else if (attr[i].is_word_end)
+        e = '>';
+      else
+        e = ' ';
+      printf ("%c%*s", e, strlen (s), "");
+      if (*p)
+        p = g_utf8_next_char (p);
+      i++;
+    }
+  while (*p || i < n_attrs);
+  printf ("\n");
+
+  p = text;
+  i = 0;
+  do
+    {
+      if (*p)
+        s = char_rep (g_utf8_get_char (p));
+      else
+        s = "";
+      if (attr[i].is_sentence_start && attr[i].is_sentence_end)
+        e = '|';
+      else if (attr[i].is_sentence_start)
+        e = '<';
+      else if (attr[i].is_sentence_end)
+        e = '>';
+      else
+        e = ' ';
+      printf ("%c%*s", e, strlen (s), "");
+      if (*p)
+        p = g_utf8_next_char (p);
+      i++;
+    }
+  while (*p || i < n_attrs);
+  printf ("\n");
+
+  lines = pango_layout_get_lines_readonly (l);
+  p = text;
+  i = 0;
+  do
+    {
+      gboolean start, end;
+
+      if (*p)
+        s = char_rep (g_utf8_get_char (p));
+      else
+        s = "";
+      start = end = FALSE;
+      for (li = lines; li; li = li->next)
+        {
+          PangoLayoutLine *line = li->data;
+          so = g_utf8_pointer_to_offset (text, text + line->start_index);
+          eo = g_utf8_pointer_to_offset (text, text + line->start_index + line->length);
+          if (so == i)
+            start = TRUE;
+          if (eo == i)
+            end = TRUE;
+        }
+      if (start && end)
+        e = '|';
+      else if (start)
+        e = '<';
+      else if (end)
+        e = '>';
+      else
+        e = ' ';
+      printf ("%c%*s", e, strlen (s), "");
+      if (*p)
+        p = g_utf8_next_char (p);
+      i++;
+    }
+  while (*p || i < n_attrs);
+  printf ("\n");
+}
+#endif
+
+static void
+test_words (GtkWidget *widget)
+{
+  AtkText *atk_text;
+  const gchar *text = "abc! def\nghi jkl\nmno";
+  Word expected[] = {
+    { -1,  0, ATK_TEXT_BOUNDARY_CHAR,            0,  0, "" },
+    { -1,  1, ATK_TEXT_BOUNDARY_CHAR,            0,  1, "a" },
+    { -1,  2, ATK_TEXT_BOUNDARY_CHAR,            1,  2, "b" },
+    { -1,  3, ATK_TEXT_BOUNDARY_CHAR,            2,  3, "c" },
+    { -1,  4, ATK_TEXT_BOUNDARY_CHAR,            3,  4, "!" },
+    { -1,  5, ATK_TEXT_BOUNDARY_CHAR,            4,  5, " " },
+    { -1,  6, ATK_TEXT_BOUNDARY_CHAR,            5,  6, "d" },
+    { -1,  7, ATK_TEXT_BOUNDARY_CHAR,            6,  7, "e" },
+    { -1,  8, ATK_TEXT_BOUNDARY_CHAR,            7,  8, "f" },
+    { -1,  9, ATK_TEXT_BOUNDARY_CHAR,            8,  9, "\n" },
+    { -1, 10, ATK_TEXT_BOUNDARY_CHAR,            9, 10, "g" },
+    { -1, 11, ATK_TEXT_BOUNDARY_CHAR,           10, 11, "h" },
+    { -1, 12, ATK_TEXT_BOUNDARY_CHAR,           11, 12, "i" },
+    { -1, 13, ATK_TEXT_BOUNDARY_CHAR,           12, 13, " " },
+    { -1, 14, ATK_TEXT_BOUNDARY_CHAR,           13, 14, "j" },
+    { -1, 15, ATK_TEXT_BOUNDARY_CHAR,           14, 15, "k" },
+    { -1, 16, ATK_TEXT_BOUNDARY_CHAR,           15, 16, "l" },
+    { -1, 17, ATK_TEXT_BOUNDARY_CHAR,           16, 17, "\n" },
+    { -1, 18, ATK_TEXT_BOUNDARY_CHAR,           17, 18, "m" },
+    { -1, 19, ATK_TEXT_BOUNDARY_CHAR,           18, 19, "n" },
+    { -1, 20, ATK_TEXT_BOUNDARY_CHAR,           19, 20, "o" },
+    { -1,  0, ATK_TEXT_BOUNDARY_WORD_START,      0,  0, "" },
+    { -1,  1, ATK_TEXT_BOUNDARY_WORD_START,      0,  0, "" },
+    { -1,  2, ATK_TEXT_BOUNDARY_WORD_START,      0,  0, "" },
+    { -1,  3, ATK_TEXT_BOUNDARY_WORD_START,      0,  0, "" },
+    { -1,  4, ATK_TEXT_BOUNDARY_WORD_START,      0,  0, "" },
+    { -1,  5, ATK_TEXT_BOUNDARY_WORD_START,      0,  5, "abc! " },
+    { -1,  6, ATK_TEXT_BOUNDARY_WORD_START,      0,  5, "abc! " },
+    { -1,  7, ATK_TEXT_BOUNDARY_WORD_START,      0,  5, "abc! " },
+    { -1,  8, ATK_TEXT_BOUNDARY_WORD_START,      0,  5, "abc! " },
+    { -1,  9, ATK_TEXT_BOUNDARY_WORD_START,      5,  9, "def\n" },
+    { -1, 10, ATK_TEXT_BOUNDARY_WORD_START,      5,  9, "def\n" },
+    { -1, 11, ATK_TEXT_BOUNDARY_WORD_START,      5,  9, "def\n" },
+    { -1, 12, ATK_TEXT_BOUNDARY_WORD_START,      5,  9, "def\n" },
+    { -1, 13, ATK_TEXT_BOUNDARY_WORD_START,      9, 13, "ghi " },
+    { -1, 14, ATK_TEXT_BOUNDARY_WORD_START,      9, 13, "ghi " },
+    { -1, 15, ATK_TEXT_BOUNDARY_WORD_START,      9, 13, "ghi " },
+    { -1, 16, ATK_TEXT_BOUNDARY_WORD_START,      9, 13, "ghi " },
+    { -1, 17, ATK_TEXT_BOUNDARY_WORD_START,     13, 17, "jkl\n" },
+    { -1, 18, ATK_TEXT_BOUNDARY_WORD_START,     13, 17, "jkl\n" },
+    { -1, 19, ATK_TEXT_BOUNDARY_WORD_START,     13, 17, "jkl\n" },
+    { -1, 20, ATK_TEXT_BOUNDARY_WORD_START,     13, 17, "jkl\n" },
+    { -1,  0, ATK_TEXT_BOUNDARY_WORD_END,        0,  0, "" },
+    { -1,  1, ATK_TEXT_BOUNDARY_WORD_END,        0,  0, "" },
+    { -1,  2, ATK_TEXT_BOUNDARY_WORD_END,        0,  0, "" },
+    { -1,  3, ATK_TEXT_BOUNDARY_WORD_END,        0,  3, "abc" },
+    { -1,  4, ATK_TEXT_BOUNDARY_WORD_END,        0,  3, "abc" },
+    { -1,  5, ATK_TEXT_BOUNDARY_WORD_END,        0,  3, "abc" },
+    { -1,  6, ATK_TEXT_BOUNDARY_WORD_END,        0,  3, "abc" },
+    { -1,  7, ATK_TEXT_BOUNDARY_WORD_END,        0,  3, "abc" },
+    { -1,  8, ATK_TEXT_BOUNDARY_WORD_END,        3,  8, "! def" },
+    { -1,  9, ATK_TEXT_BOUNDARY_WORD_END,        3,  8, "! def" },
+    { -1, 10, ATK_TEXT_BOUNDARY_WORD_END,        3,  8, "! def" },
+    { -1, 11, ATK_TEXT_BOUNDARY_WORD_END,        3,  8, "! def" },
+    { -1, 12, ATK_TEXT_BOUNDARY_WORD_END,        8, 12, "\nghi" },
+    { -1, 13, ATK_TEXT_BOUNDARY_WORD_END,        8, 12, "\nghi" },
+    { -1, 14, ATK_TEXT_BOUNDARY_WORD_END,        8, 12, "\nghi" },
+    { -1, 15, ATK_TEXT_BOUNDARY_WORD_END,        8, 12, "\nghi" },
+    { -1, 16, ATK_TEXT_BOUNDARY_WORD_END,       12, 16, " jkl" },
+    { -1, 17, ATK_TEXT_BOUNDARY_WORD_END,       12, 16, " jkl" },
+    { -1, 18, ATK_TEXT_BOUNDARY_WORD_END,       12, 16, " jkl" },
+    { -1, 19, ATK_TEXT_BOUNDARY_WORD_END,       12, 16, " jkl" },
+    { -1, 20, ATK_TEXT_BOUNDARY_WORD_END,       16, 20, "\nmno" },
+    { -1,  0, ATK_TEXT_BOUNDARY_SENTENCE_START,  0,  0, "" },
+    { -1,  1, ATK_TEXT_BOUNDARY_SENTENCE_START,  0,  0, "" },
+    { -1,  2, ATK_TEXT_BOUNDARY_SENTENCE_START,  0,  0, "" },
+    { -1,  3, ATK_TEXT_BOUNDARY_SENTENCE_START,  0,  0, "" },
+    { -1,  4, ATK_TEXT_BOUNDARY_SENTENCE_START,  0,  0, "" },
+    { -1,  5, ATK_TEXT_BOUNDARY_SENTENCE_START,  0,  5, "abc! " },
+    { -1,  6, ATK_TEXT_BOUNDARY_SENTENCE_START,  0,  5, "abc! " },
+    { -1,  7, ATK_TEXT_BOUNDARY_SENTENCE_START,  0,  5, "abc! " },
+    { -1,  8, ATK_TEXT_BOUNDARY_SENTENCE_START,  0,  5, "abc! " },
+    { -1,  9, ATK_TEXT_BOUNDARY_SENTENCE_START,  5,  9, "def\n" },
+    { -1, 10, ATK_TEXT_BOUNDARY_SENTENCE_START,  5,  9, "def\n" },
+    { -1, 11, ATK_TEXT_BOUNDARY_SENTENCE_START,  5,  9, "def\n" },
+    { -1, 12, ATK_TEXT_BOUNDARY_SENTENCE_START,  5,  9, "def\n" },
+    { -1, 13, ATK_TEXT_BOUNDARY_SENTENCE_START,  5,  9, "def\n" },
+    { -1, 14, ATK_TEXT_BOUNDARY_SENTENCE_START,  5,  9, "def\n" },
+    { -1, 15, ATK_TEXT_BOUNDARY_SENTENCE_START,  5,  9, "def\n" },
+    { -1, 16, ATK_TEXT_BOUNDARY_SENTENCE_START,  5,  9, "def\n" },
+    { -1, 17, ATK_TEXT_BOUNDARY_SENTENCE_START,  9, 17, "ghi jkl\n" },
+    { -1, 18, ATK_TEXT_BOUNDARY_SENTENCE_START,  9, 17, "ghi jkl\n" },
+    { -1, 19, ATK_TEXT_BOUNDARY_SENTENCE_START,  9, 17, "ghi jkl\n" },
+    { -1, 20, ATK_TEXT_BOUNDARY_SENTENCE_START,  9, 17, "ghi jkl\n" },
+    { -1,  0, ATK_TEXT_BOUNDARY_SENTENCE_END,    0,  0, "" },
+    { -1,  1, ATK_TEXT_BOUNDARY_SENTENCE_END,    0,  0, "" },
+    { -1,  2, ATK_TEXT_BOUNDARY_SENTENCE_END,    0,  0, "" },
+    { -1,  3, ATK_TEXT_BOUNDARY_SENTENCE_END,    0,  0, "" },
+    { -1,  4, ATK_TEXT_BOUNDARY_SENTENCE_END,    0,  4, "abc!" },
+    { -1,  5, ATK_TEXT_BOUNDARY_SENTENCE_END,    0,  4, "abc!" },
+    { -1,  6, ATK_TEXT_BOUNDARY_SENTENCE_END,    0,  4, "abc!" },
+    { -1,  7, ATK_TEXT_BOUNDARY_SENTENCE_END,    0,  4, "abc!" },
+    { -1,  8, ATK_TEXT_BOUNDARY_SENTENCE_END,    4,  8, " def" },
+    { -1,  9, ATK_TEXT_BOUNDARY_SENTENCE_END,    4,  8, " def" },
+    { -1, 10, ATK_TEXT_BOUNDARY_SENTENCE_END,    4,  8, " def" },
+    { -1, 11, ATK_TEXT_BOUNDARY_SENTENCE_END,    4,  8, " def" },
+    { -1, 12, ATK_TEXT_BOUNDARY_SENTENCE_END,    4,  8, " def" },
+    { -1, 13, ATK_TEXT_BOUNDARY_SENTENCE_END,    4,  8, " def" },
+    { -1, 14, ATK_TEXT_BOUNDARY_SENTENCE_END,    4,  8, " def" },
+    { -1, 15, ATK_TEXT_BOUNDARY_SENTENCE_END,    4,  8, " def" },
+    { -1, 16, ATK_TEXT_BOUNDARY_SENTENCE_END,    8, 16, "\nghi jkl" },
+    { -1, 17, ATK_TEXT_BOUNDARY_SENTENCE_END,    8, 16, "\nghi jkl" },
+    { -1, 18, ATK_TEXT_BOUNDARY_SENTENCE_END,    8, 16, "\nghi jkl" },
+    { -1, 19, ATK_TEXT_BOUNDARY_SENTENCE_END,    8, 16, "\nghi jkl" },
+    { -1, 20, ATK_TEXT_BOUNDARY_SENTENCE_END,   16, 20, "\nmno" },
+    { -1,  0, ATK_TEXT_BOUNDARY_LINE_START,      0,  0, "" },
+    { -1,  1, ATK_TEXT_BOUNDARY_LINE_START,      0,  0, "" },
+    { -1,  2, ATK_TEXT_BOUNDARY_LINE_START,      0,  0, "" },
+    { -1,  3, ATK_TEXT_BOUNDARY_LINE_START,      0,  0, "" },
+    { -1,  4, ATK_TEXT_BOUNDARY_LINE_START,      0,  0, "" },
+    { -1,  5, ATK_TEXT_BOUNDARY_LINE_START,      0,  0, "" },
+    { -1,  6, ATK_TEXT_BOUNDARY_LINE_START,      0,  0, "" },
+    { -1,  7, ATK_TEXT_BOUNDARY_LINE_START,      0,  0, "" },
+    { -1,  8, ATK_TEXT_BOUNDARY_LINE_START,      0,  0, "" },
+    { -1,  9, ATK_TEXT_BOUNDARY_LINE_START,      0,  9, "abc! def\n" },
+    { -1, 10, ATK_TEXT_BOUNDARY_LINE_START,      0,  9, "abc! def\n" },
+    { -1, 11, ATK_TEXT_BOUNDARY_LINE_START,      0,  9, "abc! def\n" },
+    { -1, 12, ATK_TEXT_BOUNDARY_LINE_START,      0,  9, "abc! def\n" },
+    { -1, 13, ATK_TEXT_BOUNDARY_LINE_START,      0,  9, "abc! def\n" },
+    { -1, 14, ATK_TEXT_BOUNDARY_LINE_START,      0,  9, "abc! def\n" },
+    { -1, 15, ATK_TEXT_BOUNDARY_LINE_START,      0,  9, "abc! def\n" },
+    { -1, 16, ATK_TEXT_BOUNDARY_LINE_START,      0,  9, "abc! def\n" },
+    { -1, 17, ATK_TEXT_BOUNDARY_LINE_START,      9, 17, "ghi jkl\n" },
+    { -1, 18, ATK_TEXT_BOUNDARY_LINE_START,      9, 17, "ghi jkl\n" },
+    { -1, 19, ATK_TEXT_BOUNDARY_LINE_START,      9, 17, "ghi jkl\n" },
+    { -1, 20, ATK_TEXT_BOUNDARY_LINE_START,      9, 17, "ghi jkl\n" },
+    { -1,  0, ATK_TEXT_BOUNDARY_LINE_END,        0,  0, "" },
+    { -1,  1, ATK_TEXT_BOUNDARY_LINE_END,        0,  0, "" },
+    { -1,  2, ATK_TEXT_BOUNDARY_LINE_END,        0,  0, "" },
+    { -1,  3, ATK_TEXT_BOUNDARY_LINE_END,        0,  0, "" },
+    { -1,  4, ATK_TEXT_BOUNDARY_LINE_END,        0,  0, "" },
+    { -1,  5, ATK_TEXT_BOUNDARY_LINE_END,        0,  0, "" },
+    { -1,  6, ATK_TEXT_BOUNDARY_LINE_END,        0,  0, "" },
+    { -1,  7, ATK_TEXT_BOUNDARY_LINE_END,        0,  0, "" },
+    { -1,  8, ATK_TEXT_BOUNDARY_LINE_END,        0,  0, "" },
+    { -1,  9, ATK_TEXT_BOUNDARY_LINE_END,        0,  8, "abc! def" },
+    { -1, 10, ATK_TEXT_BOUNDARY_LINE_END,        0,  8, "abc! def" },
+    { -1, 11, ATK_TEXT_BOUNDARY_LINE_END,        0,  8, "abc! def" },
+    { -1, 12, ATK_TEXT_BOUNDARY_LINE_END,        0,  8, "abc! def" },
+    { -1, 13, ATK_TEXT_BOUNDARY_LINE_END,        0,  8, "abc! def" },
+    { -1, 14, ATK_TEXT_BOUNDARY_LINE_END,        0,  8, "abc! def" },
+    { -1, 15, ATK_TEXT_BOUNDARY_LINE_END,        0,  8, "abc! def" },
+    { -1, 16, ATK_TEXT_BOUNDARY_LINE_END,        0,  8, "abc! def" },
+    { -1, 17, ATK_TEXT_BOUNDARY_LINE_END,        8, 16, "\nghi jkl" },
+    { -1, 18, ATK_TEXT_BOUNDARY_LINE_END,        8, 16, "\nghi jkl" },
+    { -1, 19, ATK_TEXT_BOUNDARY_LINE_END,        8, 16, "\nghi jkl" },
+    { -1, 20, ATK_TEXT_BOUNDARY_LINE_END,        8, 16, "\nghi jkl" },
+    {  0,  0, ATK_TEXT_BOUNDARY_CHAR,            0,  1, "a" },
+    {  0,  1, ATK_TEXT_BOUNDARY_CHAR,            1,  2, "b" },
+    {  0,  2, ATK_TEXT_BOUNDARY_CHAR,            2,  3, "c" },
+    {  0,  3, ATK_TEXT_BOUNDARY_CHAR,            3,  4, "!" },
+    {  0,  4, ATK_TEXT_BOUNDARY_CHAR,            4,  5, " " },
+    {  0,  5, ATK_TEXT_BOUNDARY_CHAR,            5,  6, "d" },
+    {  0,  6, ATK_TEXT_BOUNDARY_CHAR,            6,  7, "e" },
+    {  0,  7, ATK_TEXT_BOUNDARY_CHAR,            7,  8, "f" },
+    {  0,  8, ATK_TEXT_BOUNDARY_CHAR,            8,  9, "\n" },
+    {  0,  9, ATK_TEXT_BOUNDARY_CHAR,            9, 10, "g" },
+    {  0, 10, ATK_TEXT_BOUNDARY_CHAR,           10, 11, "h" },
+    {  0, 11, ATK_TEXT_BOUNDARY_CHAR,           11, 12, "i" },
+    {  0, 12, ATK_TEXT_BOUNDARY_CHAR,           12, 13, " " },
+    {  0, 13, ATK_TEXT_BOUNDARY_CHAR,           13, 14, "j" },
+    {  0, 14, ATK_TEXT_BOUNDARY_CHAR,           14, 15, "k" },
+    {  0, 15, ATK_TEXT_BOUNDARY_CHAR,           15, 16, "l" },
+    {  0, 16, ATK_TEXT_BOUNDARY_CHAR,           16, 17, "\n" },
+    {  0, 17, ATK_TEXT_BOUNDARY_CHAR,           17, 18, "m" },
+    {  0, 18, ATK_TEXT_BOUNDARY_CHAR,           18, 19, "n" },
+    {  0, 19, ATK_TEXT_BOUNDARY_CHAR,           19, 20, "o" },
+    {  0, 20, ATK_TEXT_BOUNDARY_CHAR,           20, 20, "" },
+    {  0,  0, ATK_TEXT_BOUNDARY_WORD_START,      0,  5, "abc! " },
+    {  0,  1, ATK_TEXT_BOUNDARY_WORD_START,      0,  5, "abc! " },
+    {  0,  2, ATK_TEXT_BOUNDARY_WORD_START,      0,  5, "abc! " },
+    {  0,  3, ATK_TEXT_BOUNDARY_WORD_START,      0,  5, "abc! " },
+    {  0,  4, ATK_TEXT_BOUNDARY_WORD_START,      0,  5, "abc! " },
+    {  0,  5, ATK_TEXT_BOUNDARY_WORD_START,      5,  9, "def\n" },
+    {  0,  6, ATK_TEXT_BOUNDARY_WORD_START,      5,  9, "def\n" },
+    {  0,  7, ATK_TEXT_BOUNDARY_WORD_START,      5,  9, "def\n" },
+    {  0,  8, ATK_TEXT_BOUNDARY_WORD_START,      5,  9, "def\n" },
+    {  0,  9, ATK_TEXT_BOUNDARY_WORD_START,      9, 13, "ghi " },
+    {  0, 10, ATK_TEXT_BOUNDARY_WORD_START,      9, 13, "ghi " },
+    {  0, 11, ATK_TEXT_BOUNDARY_WORD_START,      9, 13, "ghi " },
+    {  0, 12, ATK_TEXT_BOUNDARY_WORD_START,      9, 13, "ghi " },
+    {  0, 13, ATK_TEXT_BOUNDARY_WORD_START,     13, 17, "jkl\n" },
+    {  0, 14, ATK_TEXT_BOUNDARY_WORD_START,     13, 17, "jkl\n" },
+    {  0, 15, ATK_TEXT_BOUNDARY_WORD_START,     13, 17, "jkl\n" },
+    {  0, 16, ATK_TEXT_BOUNDARY_WORD_START,     13, 17, "jkl\n" },
+    {  0, 17, ATK_TEXT_BOUNDARY_WORD_START,     17, 20, "mno" },
+    {  0, 18, ATK_TEXT_BOUNDARY_WORD_START,     17, 20, "mno" },
+    {  0, 19, ATK_TEXT_BOUNDARY_WORD_START,     17, 20, "mno" },
+    {  0, 20, ATK_TEXT_BOUNDARY_WORD_START,     17, 20, "mno" },
+    {  0,  0, ATK_TEXT_BOUNDARY_WORD_END,        0,  3, "abc" },
+    {  0,  1, ATK_TEXT_BOUNDARY_WORD_END,        0,  3, "abc" },
+    {  0,  2, ATK_TEXT_BOUNDARY_WORD_END,        0,  3, "abc" },
+    {  0,  3, ATK_TEXT_BOUNDARY_WORD_END,        3,  8, "! def" },
+    {  0,  4, ATK_TEXT_BOUNDARY_WORD_END,        3,  8, "! def" },
+    {  0,  5, ATK_TEXT_BOUNDARY_WORD_END,        3,  8, "! def" },
+    {  0,  6, ATK_TEXT_BOUNDARY_WORD_END,        3,  8, "! def" },
+    {  0,  7, ATK_TEXT_BOUNDARY_WORD_END,        3,  8, "! def" },
+    {  0,  8, ATK_TEXT_BOUNDARY_WORD_END,        8, 12, "\nghi" },
+    {  0,  9, ATK_TEXT_BOUNDARY_WORD_END,        8, 12, "\nghi" },
+    {  0, 10, ATK_TEXT_BOUNDARY_WORD_END,        8, 12, "\nghi" },
+    {  0, 11, ATK_TEXT_BOUNDARY_WORD_END,        8, 12, "\nghi" },
+    {  0, 12, ATK_TEXT_BOUNDARY_WORD_END,       12, 16, " jkl" },
+    {  0, 13, ATK_TEXT_BOUNDARY_WORD_END,       12, 16, " jkl" },
+    {  0, 14, ATK_TEXT_BOUNDARY_WORD_END,       12, 16, " jkl" },
+    {  0, 15, ATK_TEXT_BOUNDARY_WORD_END,       12, 16, " jkl" },
+    {  0, 16, ATK_TEXT_BOUNDARY_WORD_END,       16, 20, "\nmno" },
+    {  0, 17, ATK_TEXT_BOUNDARY_WORD_END,       16, 20, "\nmno" },
+    {  0, 18, ATK_TEXT_BOUNDARY_WORD_END,       16, 20, "\nmno" },
+    {  0, 19, ATK_TEXT_BOUNDARY_WORD_END,       16, 20, "\nmno" },
+    {  0, 20, ATK_TEXT_BOUNDARY_WORD_END,       20, 20, "" },
+    {  0,  0, ATK_TEXT_BOUNDARY_SENTENCE_START,  0,  5, "abc! " },
+    {  0,  1, ATK_TEXT_BOUNDARY_SENTENCE_START,  0,  5, "abc! " },
+    {  0,  2, ATK_TEXT_BOUNDARY_SENTENCE_START,  0,  5, "abc! " },
+    {  0,  3, ATK_TEXT_BOUNDARY_SENTENCE_START,  0,  5, "abc! " },
+    {  0,  4, ATK_TEXT_BOUNDARY_SENTENCE_START,  0,  5, "abc! " },
+    {  0,  5, ATK_TEXT_BOUNDARY_SENTENCE_START,  5,  9, "def\n" },
+    {  0,  6, ATK_TEXT_BOUNDARY_SENTENCE_START,  5,  9, "def\n" },
+    {  0,  7, ATK_TEXT_BOUNDARY_SENTENCE_START,  5,  9, "def\n" },
+    {  0,  8, ATK_TEXT_BOUNDARY_SENTENCE_START,  5,  9, "def\n" },
+    {  0,  9, ATK_TEXT_BOUNDARY_SENTENCE_START,  9, 17, "ghi jkl\n" },
+    {  0, 10, ATK_TEXT_BOUNDARY_SENTENCE_START,  9, 17, "ghi jkl\n" },
+    {  0, 11, ATK_TEXT_BOUNDARY_SENTENCE_START,  9, 17, "ghi jkl\n" },
+    {  0, 12, ATK_TEXT_BOUNDARY_SENTENCE_START,  9, 17, "ghi jkl\n" },
+    {  0, 13, ATK_TEXT_BOUNDARY_SENTENCE_START,  9, 17, "ghi jkl\n" },
+    {  0, 14, ATK_TEXT_BOUNDARY_SENTENCE_START,  9, 17, "ghi jkl\n" },
+    {  0, 15, ATK_TEXT_BOUNDARY_SENTENCE_START,  9, 17, "ghi jkl\n" },
+    {  0, 16, ATK_TEXT_BOUNDARY_SENTENCE_START,  9, 17, "ghi jkl\n" },
+    {  0, 17, ATK_TEXT_BOUNDARY_SENTENCE_START, 17, 20, "mno" },
+    {  0, 18, ATK_TEXT_BOUNDARY_SENTENCE_START, 17, 20, "mno" },
+    {  0, 19, ATK_TEXT_BOUNDARY_SENTENCE_START, 17, 20, "mno" },
+    {  0, 20, ATK_TEXT_BOUNDARY_SENTENCE_START, 17, 20, "mno" },
+    {  0,  0, ATK_TEXT_BOUNDARY_SENTENCE_END,    0,  4, "abc!" },
+    {  0,  1, ATK_TEXT_BOUNDARY_SENTENCE_END,    0,  4, "abc!" },
+    {  0,  2, ATK_TEXT_BOUNDARY_SENTENCE_END,    0,  4, "abc!" },
+    {  0,  3, ATK_TEXT_BOUNDARY_SENTENCE_END,    0,  4, "abc!" },
+    {  0,  4, ATK_TEXT_BOUNDARY_SENTENCE_END,    4,  8, " def" },
+    {  0,  5, ATK_TEXT_BOUNDARY_SENTENCE_END,    4,  8, " def" },
+    {  0,  6, ATK_TEXT_BOUNDARY_SENTENCE_END,    4,  8, " def" },
+    {  0,  7, ATK_TEXT_BOUNDARY_SENTENCE_END,    4,  8, " def" },
+    {  0,  8, ATK_TEXT_BOUNDARY_SENTENCE_END,    8, 16, "\nghi jkl" },
+    {  0,  9, ATK_TEXT_BOUNDARY_SENTENCE_END,    8, 16, "\nghi jkl" },
+    {  0, 10, ATK_TEXT_BOUNDARY_SENTENCE_END,    8, 16, "\nghi jkl" },
+    {  0, 11, ATK_TEXT_BOUNDARY_SENTENCE_END,    8, 16, "\nghi jkl" },
+    {  0, 12, ATK_TEXT_BOUNDARY_SENTENCE_END,    8, 16, "\nghi jkl" },
+    {  0, 13, ATK_TEXT_BOUNDARY_SENTENCE_END,    8, 16, "\nghi jkl" },
+    {  0, 14, ATK_TEXT_BOUNDARY_SENTENCE_END,    8, 16, "\nghi jkl" },
+    {  0, 15, ATK_TEXT_BOUNDARY_SENTENCE_END,    8, 16, "\nghi jkl" },
+    {  0, 16, ATK_TEXT_BOUNDARY_SENTENCE_END,   16, 20, "\nmno" },
+    {  0, 17, ATK_TEXT_BOUNDARY_SENTENCE_END,   16, 20, "\nmno" },
+    {  0, 18, ATK_TEXT_BOUNDARY_SENTENCE_END,   16, 20, "\nmno" },
+    {  0, 19, ATK_TEXT_BOUNDARY_SENTENCE_END,   16, 20, "\nmno" },
+    {  0, 20, ATK_TEXT_BOUNDARY_SENTENCE_END,   20, 20, "" },
+    {  0,  0, ATK_TEXT_BOUNDARY_LINE_START,      0,  9, "abc! def\n" },
+    {  0,  1, ATK_TEXT_BOUNDARY_LINE_START,      0,  9, "abc! def\n" },
+    {  0,  2, ATK_TEXT_BOUNDARY_LINE_START,      0,  9, "abc! def\n" },
+    {  0,  3, ATK_TEXT_BOUNDARY_LINE_START,      0,  9, "abc! def\n" },
+    {  0,  4, ATK_TEXT_BOUNDARY_LINE_START,      0,  9, "abc! def\n" },
+    {  0,  5, ATK_TEXT_BOUNDARY_LINE_START,      0,  9, "abc! def\n" },
+    {  0,  6, ATK_TEXT_BOUNDARY_LINE_START,      0,  9, "abc! def\n" },
+    {  0,  7, ATK_TEXT_BOUNDARY_LINE_START,      0,  9, "abc! def\n" },
+    {  0,  8, ATK_TEXT_BOUNDARY_LINE_START,      0,  9, "abc! def\n" },
+    {  0,  9, ATK_TEXT_BOUNDARY_LINE_START,      9, 17, "ghi jkl\n" },
+    {  0, 10, ATK_TEXT_BOUNDARY_LINE_START,      9, 17, "ghi jkl\n" },
+    {  0, 11, ATK_TEXT_BOUNDARY_LINE_START,      9, 17, "ghi jkl\n" },
+    {  0, 12, ATK_TEXT_BOUNDARY_LINE_START,      9, 17, "ghi jkl\n" },
+    {  0, 13, ATK_TEXT_BOUNDARY_LINE_START,      9, 17, "ghi jkl\n" },
+    {  0, 14, ATK_TEXT_BOUNDARY_LINE_START,      9, 17, "ghi jkl\n" },
+    {  0, 15, ATK_TEXT_BOUNDARY_LINE_START,      9, 17, "ghi jkl\n" },
+    {  0, 16, ATK_TEXT_BOUNDARY_LINE_START,      9, 17, "ghi jkl\n" },
+    {  0, 17, ATK_TEXT_BOUNDARY_LINE_START,     17, 20, "mno" },
+    {  0, 18, ATK_TEXT_BOUNDARY_LINE_START,     17, 20, "mno" },
+    {  0, 19, ATK_TEXT_BOUNDARY_LINE_START,     17, 20, "mno" },
+    {  0, 20, ATK_TEXT_BOUNDARY_LINE_START,     17, 20, "mno" },
+    {  0,  0, ATK_TEXT_BOUNDARY_LINE_END,        0,  8, "abc! def" },
+    {  0,  1, ATK_TEXT_BOUNDARY_LINE_END,        0,  8, "abc! def" },
+    {  0,  2, ATK_TEXT_BOUNDARY_LINE_END,        0,  8, "abc! def" },
+    {  0,  3, ATK_TEXT_BOUNDARY_LINE_END,        0,  8, "abc! def" },
+    {  0,  4, ATK_TEXT_BOUNDARY_LINE_END,        0,  8, "abc! def" },
+    {  0,  5, ATK_TEXT_BOUNDARY_LINE_END,        0,  8, "abc! def" },
+    {  0,  6, ATK_TEXT_BOUNDARY_LINE_END,        0,  8, "abc! def" },
+    {  0,  7, ATK_TEXT_BOUNDARY_LINE_END,        0,  8, "abc! def" },
+    {  0,  8, ATK_TEXT_BOUNDARY_LINE_END,        0,  8, "abc! def" },
+    {  0,  9, ATK_TEXT_BOUNDARY_LINE_END,        8, 16, "\nghi jkl" },
+    {  0, 10, ATK_TEXT_BOUNDARY_LINE_END,        8, 16, "\nghi jkl" },
+    {  0, 11, ATK_TEXT_BOUNDARY_LINE_END,        8, 16, "\nghi jkl" },
+    {  0, 12, ATK_TEXT_BOUNDARY_LINE_END,        8, 16, "\nghi jkl" },
+    {  0, 13, ATK_TEXT_BOUNDARY_LINE_END,        8, 16, "\nghi jkl" },
+    {  0, 14, ATK_TEXT_BOUNDARY_LINE_END,        8, 16, "\nghi jkl" },
+    {  0, 15, ATK_TEXT_BOUNDARY_LINE_END,        8, 16, "\nghi jkl" },
+    {  0, 16, ATK_TEXT_BOUNDARY_LINE_END,        8, 16, "\nghi jkl" },
+    {  0, 17, ATK_TEXT_BOUNDARY_LINE_END,       16, 20, "\nmno" },
+    {  0, 18, ATK_TEXT_BOUNDARY_LINE_END,       16, 20, "\nmno" },
+    {  0, 19, ATK_TEXT_BOUNDARY_LINE_END,       16, 20, "\nmno" },
+    {  0, 20, ATK_TEXT_BOUNDARY_LINE_END,       16, 20, "\nmno" },
+    {  1,  0, ATK_TEXT_BOUNDARY_CHAR,            1,  2, "b" },
+    {  1,  1, ATK_TEXT_BOUNDARY_CHAR,            2,  3, "c" },
+    {  1,  2, ATK_TEXT_BOUNDARY_CHAR,            3,  4, "!" },
+    {  1,  3, ATK_TEXT_BOUNDARY_CHAR,            4,  5, " " },
+    {  1,  4, ATK_TEXT_BOUNDARY_CHAR,            5,  6, "d" },
+    {  1,  5, ATK_TEXT_BOUNDARY_CHAR,            6,  7, "e" },
+    {  1,  6, ATK_TEXT_BOUNDARY_CHAR,            7,  8, "f" },
+    {  1,  7, ATK_TEXT_BOUNDARY_CHAR,            8,  9, "\n" },
+    {  1,  8, ATK_TEXT_BOUNDARY_CHAR,            9, 10, "g" },
+    {  1,  9, ATK_TEXT_BOUNDARY_CHAR,           10, 11, "h" },
+    {  1, 10, ATK_TEXT_BOUNDARY_CHAR,           11, 12, "i" },
+    {  1, 11, ATK_TEXT_BOUNDARY_CHAR,           12, 13, " " },
+    {  1, 12, ATK_TEXT_BOUNDARY_CHAR,           13, 14, "j" },
+    {  1, 13, ATK_TEXT_BOUNDARY_CHAR,           14, 15, "k" },
+    {  1, 14, ATK_TEXT_BOUNDARY_CHAR,           15, 16, "l" },
+    {  1, 15, ATK_TEXT_BOUNDARY_CHAR,           16, 17, "\n" },
+    {  1, 16, ATK_TEXT_BOUNDARY_CHAR,           17, 18, "m" },
+    {  1, 17, ATK_TEXT_BOUNDARY_CHAR,           18, 19, "n" },
+    {  1, 18, ATK_TEXT_BOUNDARY_CHAR,           19, 20, "o" },
+    {  1, 19, ATK_TEXT_BOUNDARY_CHAR,           20, 20, "" },
+    {  1, 20, ATK_TEXT_BOUNDARY_CHAR,           20, 20, "" },
+    {  1,  0, ATK_TEXT_BOUNDARY_WORD_START,      5,  9, "def\n" },
+    {  1,  1, ATK_TEXT_BOUNDARY_WORD_START,      5,  9, "def\n" },
+    {  1,  2, ATK_TEXT_BOUNDARY_WORD_START,      5,  9, "def\n" },
+    {  1,  3, ATK_TEXT_BOUNDARY_WORD_START,      5,  9, "def\n" },
+    {  1,  4, ATK_TEXT_BOUNDARY_WORD_START,      5,  9, "def\n" },
+    {  1,  5, ATK_TEXT_BOUNDARY_WORD_START,      9, 13, "ghi " },
+    {  1,  6, ATK_TEXT_BOUNDARY_WORD_START,      9, 13, "ghi " },
+    {  1,  7, ATK_TEXT_BOUNDARY_WORD_START,      9, 13, "ghi " },
+    {  1,  8, ATK_TEXT_BOUNDARY_WORD_START,      9, 13, "ghi " },
+    {  1,  9, ATK_TEXT_BOUNDARY_WORD_START,     13, 17, "jkl\n" },
+    {  1, 10, ATK_TEXT_BOUNDARY_WORD_START,     13, 17, "jkl\n" },
+    {  1, 11, ATK_TEXT_BOUNDARY_WORD_START,     13, 17, "jkl\n" },
+    {  1, 12, ATK_TEXT_BOUNDARY_WORD_START,     13, 17, "jkl\n" },
+    {  1, 13, ATK_TEXT_BOUNDARY_WORD_START,     17, 20, "mno" },
+    {  1, 14, ATK_TEXT_BOUNDARY_WORD_START,     17, 20, "mno" },
+    {  1, 15, ATK_TEXT_BOUNDARY_WORD_START,     17, 20, "mno" },
+    {  1, 16, ATK_TEXT_BOUNDARY_WORD_START,     17, 20, "mno" },
+    {  1, 17, ATK_TEXT_BOUNDARY_WORD_START,     20, 20, "" },
+    {  1, 18, ATK_TEXT_BOUNDARY_WORD_START,     20, 20, "" },
+    {  1, 19, ATK_TEXT_BOUNDARY_WORD_START,     20, 20, "" },
+    {  1, 20, ATK_TEXT_BOUNDARY_WORD_START,     20, 20, "" },
+    {  1,  0, ATK_TEXT_BOUNDARY_WORD_END,        3,  8, "! def" },
+    {  1,  1, ATK_TEXT_BOUNDARY_WORD_END,        3,  8, "! def" },
+    {  1,  2, ATK_TEXT_BOUNDARY_WORD_END,        3,  8, "! def" },
+    {  1,  3, ATK_TEXT_BOUNDARY_WORD_END,        8, 12, "\nghi" },
+    {  1,  4, ATK_TEXT_BOUNDARY_WORD_END,        8, 12, "\nghi" },
+    {  1,  5, ATK_TEXT_BOUNDARY_WORD_END,        8, 12, "\nghi" },
+    {  1,  6, ATK_TEXT_BOUNDARY_WORD_END,        8, 12, "\nghi" },
+    {  1,  7, ATK_TEXT_BOUNDARY_WORD_END,        8, 12, "\nghi" },
+    {  1,  8, ATK_TEXT_BOUNDARY_WORD_END,       12, 16, " jkl" },
+    {  1,  9, ATK_TEXT_BOUNDARY_WORD_END,       12, 16, " jkl" },
+    {  1, 10, ATK_TEXT_BOUNDARY_WORD_END,       12, 16, " jkl" },
+    {  1, 11, ATK_TEXT_BOUNDARY_WORD_END,       12, 16, " jkl" },
+    {  1, 12, ATK_TEXT_BOUNDARY_WORD_END,       16, 20, "\nmno" },
+    {  1, 13, ATK_TEXT_BOUNDARY_WORD_END,       16, 20, "\nmno" },
+    {  1, 14, ATK_TEXT_BOUNDARY_WORD_END,       16, 20, "\nmno" },
+    {  1, 15, ATK_TEXT_BOUNDARY_WORD_END,       16, 20, "\nmno" },
+    {  1, 16, ATK_TEXT_BOUNDARY_WORD_END,       20, 20, "" },
+    {  1, 17, ATK_TEXT_BOUNDARY_WORD_END,       20, 20, "" },
+    {  1, 18, ATK_TEXT_BOUNDARY_WORD_END,       20, 20, "" },
+    {  1, 19, ATK_TEXT_BOUNDARY_WORD_END,       20, 20, "" },
+    {  1, 20, ATK_TEXT_BOUNDARY_WORD_END,       20, 20, "" },
+    {  1,  0, ATK_TEXT_BOUNDARY_SENTENCE_START,  5,  9, "def\n" },
+    {  1,  1, ATK_TEXT_BOUNDARY_SENTENCE_START,  5,  9, "def\n" },
+    {  1,  2, ATK_TEXT_BOUNDARY_SENTENCE_START,  5,  9, "def\n" },
+    {  1,  3, ATK_TEXT_BOUNDARY_SENTENCE_START,  5,  9, "def\n" },
+    {  1,  4, ATK_TEXT_BOUNDARY_SENTENCE_START,  5,  9, "def\n" },
+    {  1,  5, ATK_TEXT_BOUNDARY_SENTENCE_START,  9, 17, "ghi jkl\n" },
+    {  1,  6, ATK_TEXT_BOUNDARY_SENTENCE_START,  9, 17, "ghi jkl\n" },
+    {  1,  7, ATK_TEXT_BOUNDARY_SENTENCE_START,  9, 17, "ghi jkl\n" },
+    {  1,  8, ATK_TEXT_BOUNDARY_SENTENCE_START,  9, 17, "ghi jkl\n" },
+    {  1,  9, ATK_TEXT_BOUNDARY_SENTENCE_START, 17, 20, "mno" },
+    {  1, 10, ATK_TEXT_BOUNDARY_SENTENCE_START, 17, 20, "mno" },
+    {  1, 11, ATK_TEXT_BOUNDARY_SENTENCE_START, 17, 20, "mno" },
+    {  1, 12, ATK_TEXT_BOUNDARY_SENTENCE_START, 17, 20, "mno" },
+    {  1, 13, ATK_TEXT_BOUNDARY_SENTENCE_START, 17, 20, "mno" },
+    {  1, 14, ATK_TEXT_BOUNDARY_SENTENCE_START, 17, 20, "mno" },
+    {  1, 15, ATK_TEXT_BOUNDARY_SENTENCE_START, 17, 20, "mno" },
+    {  1, 16, ATK_TEXT_BOUNDARY_SENTENCE_START, 17, 20, "mno" },
+    {  1, 17, ATK_TEXT_BOUNDARY_SENTENCE_START, 20, 20, "" },
+    {  1, 18, ATK_TEXT_BOUNDARY_SENTENCE_START, 20, 20, "" },
+    {  1, 19, ATK_TEXT_BOUNDARY_SENTENCE_START, 20, 20, "" },
+    {  1, 20, ATK_TEXT_BOUNDARY_SENTENCE_START, 20, 20, "" },
+    {  1,  0, ATK_TEXT_BOUNDARY_SENTENCE_END,    4,  8, " def" },
+    {  1,  1, ATK_TEXT_BOUNDARY_SENTENCE_END,    4,  8, " def" },
+    {  1,  2, ATK_TEXT_BOUNDARY_SENTENCE_END,    4,  8, " def" },
+    {  1,  3, ATK_TEXT_BOUNDARY_SENTENCE_END,    4,  8, " def" },
+    {  1,  4, ATK_TEXT_BOUNDARY_SENTENCE_END,    8, 16, "\nghi jkl" },
+    {  1,  5, ATK_TEXT_BOUNDARY_SENTENCE_END,    8, 16, "\nghi jkl" },
+    {  1,  6, ATK_TEXT_BOUNDARY_SENTENCE_END,    8, 16, "\nghi jkl" },
+    {  1,  7, ATK_TEXT_BOUNDARY_SENTENCE_END,    8, 16, "\nghi jkl" },
+    {  1,  8, ATK_TEXT_BOUNDARY_SENTENCE_END,   16, 20, "\nmno" },
+    {  1,  9, ATK_TEXT_BOUNDARY_SENTENCE_END,   16, 20, "\nmno" },
+    {  1, 10, ATK_TEXT_BOUNDARY_SENTENCE_END,   16, 20, "\nmno" },
+    {  1, 11, ATK_TEXT_BOUNDARY_SENTENCE_END,   16, 20, "\nmno" },
+    {  1, 12, ATK_TEXT_BOUNDARY_SENTENCE_END,   16, 20, "\nmno" },
+    {  1, 13, ATK_TEXT_BOUNDARY_SENTENCE_END,   16, 20, "\nmno" },
+    {  1, 14, ATK_TEXT_BOUNDARY_SENTENCE_END,   16, 20, "\nmno" },
+    {  1, 15, ATK_TEXT_BOUNDARY_SENTENCE_END,   16, 20, "\nmno" },
+    {  1, 16, ATK_TEXT_BOUNDARY_SENTENCE_END,   20, 20, "" },
+    {  1, 17, ATK_TEXT_BOUNDARY_SENTENCE_END,   20, 20, "" },
+    {  1, 18, ATK_TEXT_BOUNDARY_SENTENCE_END,   20, 20, "" },
+    {  1, 19, ATK_TEXT_BOUNDARY_SENTENCE_END,   20, 20, "" },
+    {  1, 20, ATK_TEXT_BOUNDARY_SENTENCE_END,   20, 20, "" },
+    {  1,  0, ATK_TEXT_BOUNDARY_LINE_START,      9, 17, "ghi jkl\n" },
+    {  1,  1, ATK_TEXT_BOUNDARY_LINE_START,      9, 17, "ghi jkl\n" },
+    {  1,  2, ATK_TEXT_BOUNDARY_LINE_START,      9, 17, "ghi jkl\n" },
+    {  1,  3, ATK_TEXT_BOUNDARY_LINE_START,      9, 17, "ghi jkl\n" },
+    {  1,  4, ATK_TEXT_BOUNDARY_LINE_START,      9, 17, "ghi jkl\n" },
+    {  1,  5, ATK_TEXT_BOUNDARY_LINE_START,      9, 17, "ghi jkl\n" },
+    {  1,  6, ATK_TEXT_BOUNDARY_LINE_START,      9, 17, "ghi jkl\n" },
+    {  1,  7, ATK_TEXT_BOUNDARY_LINE_START,      9, 17, "ghi jkl\n" },
+    {  1,  8, ATK_TEXT_BOUNDARY_LINE_START,      9, 17, "ghi jkl\n" },
+    {  1,  9, ATK_TEXT_BOUNDARY_LINE_START,     17, 20, "mno" },
+    {  1, 10, ATK_TEXT_BOUNDARY_LINE_START,     17, 20, "mno" },
+    {  1, 11, ATK_TEXT_BOUNDARY_LINE_START,     17, 20, "mno" },
+    {  1, 12, ATK_TEXT_BOUNDARY_LINE_START,     17, 20, "mno" },
+    {  1, 13, ATK_TEXT_BOUNDARY_LINE_START,     17, 20, "mno" },
+    {  1, 14, ATK_TEXT_BOUNDARY_LINE_START,     17, 20, "mno" },
+    {  1, 15, ATK_TEXT_BOUNDARY_LINE_START,     17, 20, "mno" },
+    {  1, 16, ATK_TEXT_BOUNDARY_LINE_START,     17, 20, "mno" },
+    {  1, 17, ATK_TEXT_BOUNDARY_LINE_START,     20, 20, "" },
+    {  1, 18, ATK_TEXT_BOUNDARY_LINE_START,     20, 20, "" },
+    {  1, 19, ATK_TEXT_BOUNDARY_LINE_START,     20, 20, "" },
+    {  1, 20, ATK_TEXT_BOUNDARY_LINE_START,     20, 20, "" },
+    {  1,  0, ATK_TEXT_BOUNDARY_LINE_END,        8, 16, "\nghi jkl" },
+    {  1,  1, ATK_TEXT_BOUNDARY_LINE_END,        8, 16, "\nghi jkl" },
+    {  1,  2, ATK_TEXT_BOUNDARY_LINE_END,        8, 16, "\nghi jkl" },
+    {  1,  3, ATK_TEXT_BOUNDARY_LINE_END,        8, 16, "\nghi jkl" },
+    {  1,  4, ATK_TEXT_BOUNDARY_LINE_END,        8, 16, "\nghi jkl" },
+    {  1,  5, ATK_TEXT_BOUNDARY_LINE_END,        8, 16, "\nghi jkl" },
+    {  1,  6, ATK_TEXT_BOUNDARY_LINE_END,        8, 16, "\nghi jkl" },
+    {  1,  7, ATK_TEXT_BOUNDARY_LINE_END,        8, 16, "\nghi jkl" },
+    {  1,  8, ATK_TEXT_BOUNDARY_LINE_END,        8, 16, "\nghi jkl" },
+    {  1,  9, ATK_TEXT_BOUNDARY_LINE_END,       16, 20, "\nmno" },
+    {  1, 10, ATK_TEXT_BOUNDARY_LINE_END,       16, 20, "\nmno" },
+    {  1, 11, ATK_TEXT_BOUNDARY_LINE_END,       16, 20, "\nmno" },
+    {  1, 12, ATK_TEXT_BOUNDARY_LINE_END,       16, 20, "\nmno" },
+    {  1, 13, ATK_TEXT_BOUNDARY_LINE_END,       16, 20, "\nmno" },
+    {  1, 14, ATK_TEXT_BOUNDARY_LINE_END,       16, 20, "\nmno" },
+    {  1, 15, ATK_TEXT_BOUNDARY_LINE_END,       16, 20, "\nmno" },
+    {  1, 16, ATK_TEXT_BOUNDARY_LINE_END,       16, 20, "\nmno" },
+    {  1, 17, ATK_TEXT_BOUNDARY_LINE_END,       20, 20, "" },
+    {  1, 18, ATK_TEXT_BOUNDARY_LINE_END,       20, 20, "" },
+    {  1, 19, ATK_TEXT_BOUNDARY_LINE_END,       20, 20, "" },
+    {  1, 20, ATK_TEXT_BOUNDARY_LINE_END,       20, 20, "" },
+    {  0, -1, }
+  };
+  gint start, end;
+  gchar *word;
+  gint i;
+
+  atk_text = ATK_TEXT (gtk_widget_get_accessible (widget));
+
+  set_text (widget, text);
+#ifdef SHOW_TEXT_ATTRIBUTES
+  if (GTK_IS_LABEL (widget))
+    show_text_attributes (gtk_label_get_layout (GTK_LABEL (widget)));
+  else if (GTK_IS_ENTRY (widget))
+    show_text_attributes (gtk_entry_get_layout (GTK_ENTRY (widget)));
+#endif
+
+#ifdef DUMP_RESULTS
+  for (i = -1; i <= 1; i++)
+    {
+      gint j, k;
+      for (j = ATK_TEXT_BOUNDARY_CHAR; j <= ATK_TEXT_BOUNDARY_LINE_END; j++)
+        for (k = 0; k <= strlen (text); k++)
+          {
+            switch (i)
+              {
+              case -1:
+                word = atk_text_get_text_before_offset (atk_text, k, j, &start, &end);
+                break;
+              case 0:
+                word = atk_text_get_text_at_offset (atk_text, k, j, &start, &end);
+                break;
+              case 1:
+                word = atk_text_get_text_after_offset (atk_text, k, j, &start, &end);
+                break;
+              default:
+                g_assert_not_reached ();
+                break;
+              }
+            printf ("    { %2d, %2d, %s %2d, %2d, \"%s\" },\n", i, k, boundary(j), start, end, escape (word));
+            g_free (word);
+          }
+    }
+#endif
+
+  for (i = 0; expected[i].offset != -1; i++)
+    {
+      if (GTK_IS_ENTRY (widget))
+        {
+          /* GtkEntry sets single-paragraph mode on its pango layout */
+          if (expected[i].boundary == ATK_TEXT_BOUNDARY_LINE_START ||
+              expected[i].boundary == ATK_TEXT_BOUNDARY_LINE_END)
+            continue;
+        }
+
+      switch (expected[i].gravity)
+        {
+          case -1:
+            word = atk_text_get_text_before_offset (atk_text,
+                                                    expected[i].offset,
+                                                    expected[i].boundary,
+                                                    &start, &end);
+            break;
+          case 0:
+            word = atk_text_get_text_at_offset (atk_text,
+                                                expected[i].offset,
+                                                expected[i].boundary,
+                                                &start, &end);
+            break;
+          case 1:
+            word = atk_text_get_text_after_offset (atk_text,
+                                                   expected[i].offset,
+                                                   expected[i].boundary,
+                                                   &start, &end);
+            break;
+          default:
+            g_assert_not_reached ();
+            break;
+        }
+
+      g_assert_cmpstr (word, ==, expected[i].word);
+      g_assert_cmpint (start, ==, expected[i].start);
+      g_assert_cmpint (end, ==, expected[i].end);
+      g_free (word);
+    }
+}
+
+static void
+select_region (GtkWidget *widget,
+               gint       start,
+               gint       end)
+{
+  if (GTK_IS_EDITABLE (widget))
+    gtk_editable_select_region (GTK_EDITABLE (widget), start, end);
+  else if (GTK_IS_LABEL (widget))
+    gtk_label_select_region (GTK_LABEL (widget), start, end);
+  else if (GTK_IS_TEXT_VIEW (widget))
+    {
+      GtkTextBuffer *buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (widget));
+      GtkTextIter start_iter, end_iter;
+
+      gtk_text_buffer_get_iter_at_offset (buffer, &start_iter, end);
+      gtk_text_buffer_get_iter_at_offset (buffer, &end_iter, start);
+
+      gtk_text_buffer_select_range (buffer, &start_iter, &end_iter);
+    }
+  else
+    g_assert_not_reached ();
+}
+
+typedef struct {
+  gint count;
+  gint position;
+  gint bound;
+} SelectionData;
+
+static void
+caret_moved_cb (AtkText *text, gint position, SelectionData *data)
+{
+  data->count++;
+  data->position = position;
+}
+
+static void
+selection_changed_cb (AtkText *text, SelectionData *data)
+{
+  data->count++;
+
+  atk_text_get_selection (text, 0, &data->bound, &data->position);
+}
+
+static void
+test_selection (GtkWidget *widget)
+{
+  AtkText *atk_text;
+  const gchar *text = "Bla bla bla";
+  gint n;
+  gchar *ret;
+  gint start, end;
+  SelectionData data1;
+  SelectionData data2;
+
+  if (GTK_IS_LABEL (widget))
+    gtk_label_set_selectable (GTK_LABEL (widget), TRUE);
+
+  atk_text = ATK_TEXT (gtk_widget_get_accessible (widget));
+
+  data1.count = 0;
+  data2.count = 0;
+  g_signal_connect (atk_text, "text_caret_moved",
+                    G_CALLBACK (caret_moved_cb), &data1);
+  g_signal_connect (atk_text, "text_selection_changed",
+                    G_CALLBACK (selection_changed_cb), &data2);
+
+  set_text (widget, text);
+
+  n = atk_text_get_n_selections (atk_text);
+  g_assert_cmpint (n, ==, 0);
+
+  if (data1.count == 1)
+    /* insertion before cursor */
+    g_assert_cmpint (data1.position, ==, 11);
+  else
+    /* insertion after cursor */
+    g_assert_cmpint (data1.count, ==, 0);
+  g_assert_cmpint (data2.count, ==, 0);
+
+  select_region (widget, 4, 7);
+
+  g_assert_cmpint (data1.count, >=, 1);
+  g_assert_cmpint (data1.position, ==, 7);
+  g_assert_cmpint (data2.count, >=, 1);
+  g_assert_cmpint (data2.bound, ==, 4);
+  g_assert_cmpint (data2.position, ==, 7);
+
+  n = atk_text_get_n_selections (atk_text);
+  g_assert_cmpint (n, ==, 1);
+
+  ret = atk_text_get_selection (atk_text, 0, &start, &end);
+  g_assert_cmpstr (ret, ==, "bla");
+  g_assert_cmpint (start, ==, 4);
+  g_assert_cmpint (end, ==, 7);
+  g_free (ret);
+
+  atk_text_remove_selection (atk_text, 0);
+  n = atk_text_get_n_selections (atk_text);
+  g_assert_cmpint (n, ==, 0);
+
+  g_assert_cmpint (data1.count, >=, 1);
+  g_assert_cmpint (data2.count, >=, 2);
+  g_assert_cmpint (data2.position, ==, 7);
+  g_assert_cmpint (data2.bound, ==, 7);
+}
+
+static void
+setup_test (GtkWidget *widget)
+{
+  set_text (widget, "");
+}
+
+static void
+add_text_test (const gchar      *prefix,
+               GTestFixtureFunc  test_func,
+               GtkWidget        *widget)
+{
+  gchar *path;
+
+  path = g_strdup_printf ("%s/%s", prefix, G_OBJECT_TYPE_NAME (widget));
+  g_test_add_vtable (path,
+                     0,
+                     g_object_ref (widget),
+                     (GTestFixtureFunc) setup_test,
+                     (GTestFixtureFunc) test_func,
+                     (GTestFixtureFunc) g_object_unref);
+  g_free (path);
+}
+
+static void
+add_text_tests (GtkWidget *widget)
+{
+  g_object_ref_sink (widget);
+  add_text_test ("/text/basic", (GTestFixtureFunc) test_basic, widget);
+  add_text_test ("/text/words", (GTestFixtureFunc) test_words, widget);
+  add_text_test ("/text/changed", (GTestFixtureFunc) test_text_changed, widget);
+  add_text_test ("/text/selection", (GTestFixtureFunc) test_selection, widget);
+  g_object_unref (widget);
+}
+
+static void
+test_bold_label (void)
+{
+  GtkWidget *label;
+  AtkObject *atk_obj;
+  gchar *text;
+
+  g_test_bug ("126797");
+
+  label = gtk_label_new ("<b>Bold?</b>");
+  g_object_ref_sink (label);
+
+  atk_obj = gtk_widget_get_accessible (label);
+
+  text = atk_text_get_text (ATK_TEXT (atk_obj), 0, -1);
+  g_assert_cmpstr (text, ==, "<b>Bold?</b>");
+  g_free (text);
+
+  gtk_label_set_use_markup (GTK_LABEL (label), TRUE);
+
+  text = atk_text_get_text (ATK_TEXT (atk_obj), 0, -1);
+  g_assert_cmpstr (text, ==, "Bold?");
+  g_free (text);
+
+  g_object_unref (label);
+}
+
+int
+main (int argc, char *argv[])
+{
+  gtk_test_init (&argc, &argv, NULL);
+
+  g_test_bug_base ("http://bugzilla.gnome.org/");
+
+  g_test_add_func ("/text/bold/GtkLabel", test_bold_label);
+
+  add_text_tests (gtk_label_new (""));
+  add_text_tests (gtk_entry_new ());
+  add_text_tests (gtk_text_view_new ());
+
+  return g_test_run ();
+}
diff --git a/testsuite/a11y/text.txt b/testsuite/a11y/text.txt
new file mode 100644 (file)
index 0000000..a90741d
--- /dev/null
@@ -0,0 +1,49 @@
+window1
+  "window"
+  index: 0
+  state: enabled resizable sensitive showing visible
+  toolkit: gtk
+  <AtkComponent>
+  layer: window
+  alpha: 1
+  text1
+    "text"
+    parent: window1
+    index: 0
+    state: editable enabled focusable multi-line sensitive showing visible
+    toolkit: gtk
+    <AtkComponent>
+    layer: widget
+    alpha: 1
+    <AtkText>
+    text: Twas brillig, and the slithy toves
+Did gyre and gimple in the wabe
+    character count: 66
+    caret offset: 66
+    default attributes: bg-color: <omitted>
+                        bg-full-height: false
+                        direction: <omitted>
+                        editable: true
+                        family-name: <omitted>
+                        fg-color: <omitted>
+                        indent: 0
+                        invisible: false
+                        justification: left
+                        language: <omitted>
+                        left-margin: 0
+                        pixels-above-lines: 0
+                        pixels-below-lines: 0
+                        pixels-inside-wrap: 0
+                        right-margin: 0
+                        rise: 0
+                        scale: 1
+                        size: <omitted>
+                        stretch: <omitted>
+                        strikethrough: false
+                        style: <omitted>
+                        underline: none
+                        variant: <omitted>
+                        weight: <omitted>
+                        wrap-mode: none
+    <AtkStreamableContent>
+    mime types: application/x-gtk-text-buffer-rich-text text/plain
diff --git a/testsuite/a11y/text.ui b/testsuite/a11y/text.ui
new file mode 100644 (file)
index 0000000..508efd5
--- /dev/null
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+  <!-- interface-requires gtk+ 3.0 -->
+  <object class="GtkTextBuffer" id="buffer1">
+    <property name="text">Twas brillig, and the slithy toves
+Did gyre and gimple in the wabe</property>
+  </object>
+  <object class="GtkWindow" id="window1">
+    <property name="can_focus">False</property>
+    <property name="type">popup</property>
+    <child>
+      <object class="GtkTextView" id="text1">
+        <property name="visible">True</property>
+        <property name="can_focus">True</property>
+        <property name="buffer">buffer1</property>
+      </object>
+    </child>
+  </object>
+</interface>
diff --git a/testsuite/a11y/tree-performance.c b/testsuite/a11y/tree-performance.c
new file mode 100644 (file)
index 0000000..b28f7a3
--- /dev/null
@@ -0,0 +1,369 @@
+/*
+ * Copyright (C) 2011 Red Hat Inc.
+ *
+ * Author:
+ *      Matthias Clasen <mclasen@redhat.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <gtk/gtk.h>
+
+#define N_ROWS 10000
+
+const gchar list_ui[] =
+  "<interface>"
+  "  <object class='GtkListStore' id='liststore1'>"
+  "    <columns>"
+  "      <column type='gchararray'/>"
+  "      <column type='gchararray'/>"
+  "      <column type='gchararray'/>"
+  "      <column type='gboolean'/>"
+  "      <column type='gint'/>"
+  "      <column type='gint'/>"
+  "    </columns>"
+  "    <data>"
+  "      <row><col id='0'>One</col><col id='1'>Two</col><col id='2'>Three</col><col id='3'>True</col><col id='4'>50</col><col id='5'>50</col></row>"
+  "    </data>"
+  "  </object>"
+  "  <object class='GtkWindow' id='window1'>"
+  "    <child>"
+  "      <object class='GtkTreeView' id='treeview1'>"
+  "        <property name='visible'>True</property>"
+  "        <property name='model'>liststore1</property>"
+  "        <child>"
+  "          <object class='GtkTreeViewColumn' id='column1'>"
+  "            <property name='title' translatable='yes'>First column</property>"
+  "            <child>"
+  "              <object class='GtkCellRendererText' id='renderer1'>"
+  "              </object>"
+  "              <attributes>"
+  "                <attribute name='text'>0</attribute>"
+  "              </attributes>"
+  "            </child>"
+  "            <child>"
+  "              <object class='GtkCellRendererToggle' id='renderer2'>"
+  "              </object>"
+  "              <attributes>"
+  "                <attribute name='active'>3</attribute>"
+  "              </attributes>"
+  "            </child>"
+  "          </object>"
+  "        </child>"
+  "        <child>"
+  "          <object class='GtkTreeViewColumn' id='column2'>"
+  "            <property name='title' translatable='yes'>Second column</property>"
+  "            <child>"
+  "              <object class='GtkCellRendererText' id='renderer3'>"
+  "              </object>"
+  "              <attributes>"
+  "                <attribute name='text'>1</attribute>"
+  "              </attributes>"
+  "            </child>"
+  "            <child>"
+  "              <object class='GtkCellRendererProgress' id='renderer4'>"
+  "              </object>"
+  "              <attributes>"
+  "                <attribute name='value'>4</attribute>"
+  "              </attributes>"
+  "            </child>"
+  "          </object>"
+  "        </child>"
+  "      </object>"
+  "    </child>"
+  "  </object>"
+  "</interface>";
+
+static void
+walk_accessible_tree (AtkObject *accessible,
+                      gpointer   data)
+{
+  gint *count = data;
+  gint i;
+
+  (*count)++;
+
+  for (i = 0; i < atk_object_get_n_accessible_children (accessible); i++)
+    {
+      AtkObject *child = atk_object_ref_accessible_child (accessible, i);
+      walk_accessible_tree (child, data);
+      g_object_unref (child);
+    }
+}
+
+static GtkWidget *
+builder_get_toplevel (GtkBuilder *builder)
+{
+  GSList *list, *walk;
+  GtkWidget *window = NULL;
+
+  list = gtk_builder_get_objects (builder);
+  for (walk = list; walk; walk = walk->next)
+    {
+      if (GTK_IS_WINDOW (walk->data) &&
+          gtk_widget_get_parent (walk->data) == NULL)
+        {
+          window = walk->data;
+          break;
+        }
+    }
+
+  g_slist_free (list);
+
+  return window;
+}
+
+static void
+populate_list (GtkBuilder *builder)
+{
+  GtkTreeView *tv;
+  GtkListStore *store;
+  GtkTreeIter iter;
+  gint i;
+
+  tv = (GtkTreeView *)gtk_builder_get_object (builder, "treeview1");
+  store = (GtkListStore *)gtk_tree_view_get_model (tv);
+
+  /* append a many rows */
+  for (i = 0; i < N_ROWS; i++)
+    {
+      gtk_list_store_append (store, &iter);
+      gtk_list_store_set (store, &iter, 0, "Bla", 1, "Bla bla", 2, "Bla bla bla", 3, i % 2 == 0 ? TRUE : FALSE, 4, i % 100, 5, i, -1);
+    }
+}
+
+static void
+test_performance_list (void)
+{
+  GtkBuilder *builder;
+  gdouble elapsed;
+  GtkWidget *window;
+  GError *error = NULL;
+
+  builder = gtk_builder_new ();
+  gtk_builder_add_from_string (builder, list_ui, -1, &error);
+  g_assert_no_error (error);
+  window = builder_get_toplevel (builder);
+  g_assert (window);
+
+  gtk_widget_show (window);
+
+  g_test_timer_start ();
+
+  populate_list (builder);
+
+  elapsed = g_test_timer_elapsed ();
+  g_test_minimized_result (elapsed, "large list test: %gsec", elapsed);
+  g_object_unref (builder);
+}
+
+static void
+test_a11y_performance_list (void)
+{
+  GtkBuilder *builder;
+  gdouble elapsed;
+  GtkWidget *window;
+  GError *error = NULL;
+  gint count_before;
+  gint count_after;
+
+  builder = gtk_builder_new ();
+  gtk_builder_add_from_string (builder, list_ui, -1, &error);
+  g_assert_no_error (error);
+  window = builder_get_toplevel (builder);
+  g_assert (window);
+
+  gtk_widget_show (window);
+
+  g_test_timer_start ();
+
+  /* make sure all accessibles exist */
+  count_before = 0;
+  walk_accessible_tree (gtk_widget_get_accessible (window), &count_before);
+
+  populate_list (builder);
+
+  /* for good measure, do this again */
+  count_after = 0;
+  walk_accessible_tree (gtk_widget_get_accessible (window), &count_after);
+
+  elapsed = g_test_timer_elapsed ();
+  g_test_minimized_result (elapsed, "large list with a11y: %gsec", elapsed);
+  g_object_unref (builder);
+
+  g_test_message ("%d accessibles before, %d after\n", count_before, count_after);
+}
+
+const gchar tree_ui[] =
+  "<interface>"
+  "  <object class='GtkTreeStore' id='treestore1'>"
+  "    <columns>"
+  "      <column type='gchararray'/>"
+  "      <column type='gchararray'/>"
+  "      <column type='gchararray'/>"
+  "      <column type='gboolean'/>"
+  "      <column type='gint'/>"
+  "      <column type='gint'/>"
+  "    </columns>"
+  "  </object>"
+  "  <object class='GtkWindow' id='window1'>"
+  "    <child>"
+  "      <object class='GtkTreeView' id='treeview1'>"
+  "        <property name='visible'>True</property>"
+  "        <property name='model'>treestore1</property>"
+  "        <child>"
+  "          <object class='GtkTreeViewColumn' id='column1'>"
+  "            <property name='title' translatable='yes'>First column</property>"
+  "            <child>"
+  "              <object class='GtkCellRendererText' id='renderer1'>"
+  "              </object>"
+  "              <attributes>"
+  "                <attribute name='text'>0</attribute>"
+  "              </attributes>"
+  "            </child>"
+  "            <child>"
+  "              <object class='GtkCellRendererToggle' id='renderer2'>"
+  "              </object>"
+  "              <attributes>"
+  "                <attribute name='active'>3</attribute>"
+  "              </attributes>"
+  "            </child>"
+  "          </object>"
+  "        </child>"
+  "        <child>"
+  "          <object class='GtkTreeViewColumn' id='column2'>"
+  "            <property name='title' translatable='yes'>Second column</property>"
+  "            <child>"
+  "              <object class='GtkCellRendererText' id='renderer3'>"
+  "              </object>"
+  "              <attributes>"
+  "                <attribute name='text'>1</attribute>"
+  "              </attributes>"
+  "            </child>"
+  "            <child>"
+  "              <object class='GtkCellRendererProgress' id='renderer4'>"
+  "              </object>"
+  "              <attributes>"
+  "                <attribute name='value'>4</attribute>"
+  "              </attributes>"
+  "            </child>"
+  "          </object>"
+  "        </child>"
+  "      </object>"
+  "    </child>"
+  "  </object>"
+  "</interface>";
+
+static void
+populate_tree (GtkBuilder *builder)
+{
+  GtkTreeView *tv;
+  GtkTreeStore *store;
+  GtkTreeIter iter;
+  gint i;
+
+  tv = (GtkTreeView *)gtk_builder_get_object (builder, "treeview1");
+  store = (GtkTreeStore *)gtk_tree_view_get_model (tv);
+
+  /* append a thousand rows */
+  for (i = 0; i < N_ROWS / 3; i++)
+    {
+      gtk_tree_store_append (store, &iter, NULL);
+      gtk_tree_store_set (store, &iter, 0, "Bla", 1, "Bla bla", 2, "Bla bla bla", 3, i % 2 == 0 ? TRUE : FALSE, 4, i % 100, 5, i, -1);
+      gtk_tree_store_append (store, &iter, &iter);
+      gtk_tree_store_set (store, &iter, 0, "Bla", 1, "Bla bla", 2, "Bla bla bla", 3, i % 2 == 0 ? TRUE : FALSE, 4, i % 100, 5, i, -1);
+      gtk_tree_store_append (store, &iter, &iter);
+      gtk_tree_store_set (store, &iter, 0, "Bla", 1, "Bla bla", 2, "Bla bla bla", 3, i % 2 == 0 ? TRUE : FALSE, 4, i % 100, 5, i, -1);
+    }
+
+  gtk_tree_view_expand_all (tv);
+}
+
+static void
+test_performance_tree (void)
+{
+  GtkBuilder *builder;
+  gdouble elapsed;
+  GtkWidget *window;
+  GError *error = NULL;
+
+  builder = gtk_builder_new ();
+  gtk_builder_add_from_string (builder, tree_ui, -1, &error);
+  g_assert_no_error (error);
+  window = builder_get_toplevel (builder);
+  g_assert (window);
+
+  gtk_widget_show (window);
+
+  g_test_timer_start ();
+
+  populate_tree (builder);
+
+  elapsed = g_test_timer_elapsed ();
+  g_test_minimized_result (elapsed, "large tree test: %gsec", elapsed);
+  g_object_unref (builder);
+}
+
+static void
+test_a11y_performance_tree (void)
+{
+  GtkBuilder *builder;
+  gdouble elapsed;
+  GtkWidget *window;
+  GError *error = NULL;
+  gint count_before;
+  gint count_after;
+
+  builder = gtk_builder_new ();
+  gtk_builder_add_from_string (builder, tree_ui, -1, &error);
+  g_assert_no_error (error);
+  window = builder_get_toplevel (builder);
+  g_assert (window);
+
+  gtk_widget_show (window);
+
+  g_test_timer_start ();
+
+  /* make sure all accessibles exist */
+  count_before = 0;
+  walk_accessible_tree (gtk_widget_get_accessible (window), &count_before);
+
+  populate_tree (builder);
+
+  /* for good measure, do this again */
+  count_after = 0;
+  walk_accessible_tree (gtk_widget_get_accessible (window), &count_after);
+
+  elapsed = g_test_timer_elapsed ();
+  g_test_minimized_result (elapsed, "large tree with a11y: %gsec", elapsed);
+  g_object_unref (builder);
+
+  g_test_message ("%d accessibles before, %d after\n", count_before, count_after);
+}
+
+int
+main (int argc, char *argv[])
+{
+  gtk_test_init (&argc, &argv, NULL);
+
+  if (!g_test_perf ())
+    return 0;
+
+  g_test_add_func ("/performance/list", test_performance_list);
+  g_test_add_func ("/a11y/performance/list", test_a11y_performance_list);
+  g_test_add_func ("/performance/tree", test_performance_tree);
+  g_test_add_func ("/a11y/performance/tree", test_a11y_performance_tree);
+
+  return g_test_run ();
+}
diff --git a/testsuite/a11y/tree-relationships.c b/testsuite/a11y/tree-relationships.c
new file mode 100644 (file)
index 0000000..34f45b6
--- /dev/null
@@ -0,0 +1,382 @@
+/*
+ * Copyright (C) 2011 SUSE Linux Products GmbH, Nurenberg, Germany
+ *
+ * Author:
+ *      Mike Gorse <mgorse@suse.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <gtk/gtk.h>
+
+const gchar list_ui[] =
+  "<interface>"
+  "  <object class='GtkListStore' id='liststore1'>"
+  "    <columns>"
+  "      <column type='gchararray'/>"
+  "      <column type='gchararray'/>"
+  "      <column type='gchararray'/>"
+  "      <column type='gboolean'/>"
+  "      <column type='gint'/>"
+  "      <column type='gint'/>"
+  "    </columns>"
+  "    <data>"
+  "      <row><col id='0'>One</col><col id='1'>Two</col><col id='2'>Three</col><col id='3'>True</col><col id='4'>50</col><col id='5'>50</col></row>"
+  "    </data>"
+  "  </object>"
+  "  <object class='GtkWindow' id='window1'>"
+  "    <child>"
+  "      <object class='GtkTreeView' id='treeview1'>"
+  "        <property name='visible'>True</property>"
+  "        <property name='model'>liststore1</property>"
+  "        <child>"
+  "          <object class='GtkTreeViewColumn' id='column1'>"
+  "            <property name='title' translatable='yes'>First column</property>"
+  "            <child>"
+  "              <object class='GtkCellRendererText' id='renderer1'>"
+  "              </object>"
+  "              <attributes>"
+  "                <attribute name='text'>0</attribute>"
+  "              </attributes>"
+  "            </child>"
+  "            <child>"
+  "              <object class='GtkCellRendererToggle' id='renderer2'>"
+  "              </object>"
+  "              <attributes>"
+  "                <attribute name='active'>3</attribute>"
+  "              </attributes>"
+  "            </child>"
+  "          </object>"
+  "        </child>"
+  "        <child>"
+  "          <object class='GtkTreeViewColumn' id='column2'>"
+  "            <property name='title' translatable='yes'>Second column</property>"
+  "            <child>"
+  "              <object class='GtkCellRendererText' id='renderer3'>"
+  "              </object>"
+  "              <attributes>"
+  "                <attribute name='text'>1</attribute>"
+  "              </attributes>"
+  "            </child>"
+  "            <child>"
+  "              <object class='GtkCellRendererProgress' id='renderer4'>"
+  "              </object>"
+  "              <attributes>"
+  "                <attribute name='value'>4</attribute>"
+  "              </attributes>"
+  "            </child>"
+  "          </object>"
+  "        </child>"
+  "      </object>"
+  "    </child>"
+  "  </object>"
+  "</interface>";
+
+static GtkWidget *
+builder_get_toplevel (GtkBuilder *builder)
+{
+  GSList *list, *walk;
+  GtkWidget *window = NULL;
+
+  list = gtk_builder_get_objects (builder);
+  for (walk = list; walk; walk = walk->next)
+    {
+      if (GTK_IS_WINDOW (walk->data) &&
+          gtk_widget_get_parent (walk->data) == NULL)
+        {
+          window = walk->data;
+          break;
+        }
+    }
+
+  g_slist_free (list);
+
+  return window;
+}
+
+const gchar tree_ui[] =
+  "<interface>"
+  "  <object class='GtkTreeStore' id='treestore1'>"
+  "    <columns>"
+  "      <column type='gchararray'/>"
+  "      <column type='gchararray'/>"
+  "      <column type='gchararray'/>"
+  "      <column type='gboolean'/>"
+  "      <column type='gint'/>"
+  "      <column type='gint'/>"
+  "    </columns>"
+  "  </object>"
+  "  <object class='GtkWindow' id='window1'>"
+  "    <child>"
+  "      <object class='GtkTreeView' id='treeview1'>"
+  "        <property name='visible'>True</property>"
+  "        <property name='model'>treestore1</property>"
+  "        <child>"
+  "          <object class='GtkTreeViewColumn' id='column1'>"
+  "            <property name='title' translatable='yes'>First column</property>"
+  "            <child>"
+  "              <object class='GtkCellRendererText' id='renderer1'>"
+  "              </object>"
+  "              <attributes>"
+  "                <attribute name='text'>0</attribute>"
+  "              </attributes>"
+  "            </child>"
+  "            <child>"
+  "              <object class='GtkCellRendererToggle' id='renderer2'>"
+  "              </object>"
+  "              <attributes>"
+  "                <attribute name='active'>3</attribute>"
+  "              </attributes>"
+  "            </child>"
+  "          </object>"
+  "        </child>"
+  "        <child>"
+  "          <object class='GtkTreeViewColumn' id='column2'>"
+  "            <property name='title' translatable='yes'>Second column</property>"
+  "            <child>"
+  "              <object class='GtkCellRendererText' id='renderer3'>"
+  "              </object>"
+  "              <attributes>"
+  "                <attribute name='text'>1</attribute>"
+  "              </attributes>"
+  "            </child>"
+  "            <child>"
+  "              <object class='GtkCellRendererProgress' id='renderer4'>"
+  "              </object>"
+  "              <attributes>"
+  "                <attribute name='value'>4</attribute>"
+  "              </attributes>"
+  "            </child>"
+  "          </object>"
+  "        </child>"
+  "      </object>"
+  "    </child>"
+  "  </object>"
+  "</interface>";
+
+static void
+populate_tree (GtkBuilder *builder)
+{
+  GtkTreeView *tv;
+  GtkTreeStore *store;
+  GtkTreeIter iter;
+
+  tv = (GtkTreeView *)gtk_builder_get_object (builder, "treeview1");
+  store = (GtkTreeStore *)gtk_tree_view_get_model (tv);
+
+  /* append some rows */
+  gtk_tree_store_append (store, &iter, NULL);
+  gtk_tree_store_set (store, &iter, 0, "a(1)", 1, "a(2)", 2, "a(3)", 3, TRUE, 4, 0, 5, 0, -1);
+  gtk_tree_store_append (store, &iter, &iter);
+  gtk_tree_store_set (store, &iter, 0, "aa(1)", 1, "aa(2)", 2, "aa(3)", 3, TRUE, 4, 0, 5, 0, -1);
+      gtk_tree_store_append (store, &iter, &iter);
+  gtk_tree_store_set (store, &iter, 0, "aaa(1)", 1, "aaa(2)", 2, "aaa(3)", 3, TRUE, 4, 0, 5, 0, -1);
+
+  gtk_tree_store_append (store, &iter, NULL);
+  gtk_tree_store_set (store, &iter, 0, "b(1)", 1, "b(2)", 2, "b(3)", 3, TRUE, 4, 0, 5, 0, -1);
+  gtk_tree_store_append (store, &iter, &iter);
+  gtk_tree_store_set (store, &iter, 0, "bb(1)", 1, "bb(2)", 2, "bb(3)", 3, TRUE, 4, 0, 5, 0, -1);
+      gtk_tree_store_append (store, &iter, &iter);
+  gtk_tree_store_set (store, &iter, 0, "bbb(1)", 1, "bbb(2)", 2, "bbb(3)", 3, TRUE, 4, 0, 5, 0, -1);
+}
+
+typedef struct {
+  gint count;
+  AtkObject *descendant;
+} SignalData;
+
+static void
+active_descendant_changed (AtkObject  *accessible,
+                  AtkObject *descendant,
+                  SignalData *data)
+{
+  data->count++;
+  if (data->descendant)
+    g_object_unref (data->descendant);
+  data->descendant = g_object_ref (descendant);
+}
+
+static gboolean
+quit_loop (gpointer data)
+{
+  GMainLoop *loop = data;
+  g_main_loop_quit (loop);
+  return FALSE;
+}
+
+static void
+process_pending_idles ()
+{
+  GMainLoop *loop = g_main_loop_new (NULL, FALSE);
+  gdk_threads_add_idle (quit_loop, loop);
+  g_main_loop_run (loop);
+}
+
+static void
+test_a11y_tree_focus (void)
+{
+  GtkBuilder *builder;
+  GtkWidget *window;
+  GError *error = NULL;
+  GtkTreeView *tv;
+  GtkTreePath *path = NULL;
+  GtkTreeViewColumn *focus_column = NULL;
+  SignalData data;
+  AtkObject *accessible;
+  AtkObject *child;
+  gchar *text;
+
+  builder = gtk_builder_new ();
+  gtk_builder_add_from_string (builder, tree_ui, -1, &error);
+  g_assert_no_error (error);
+  window = builder_get_toplevel (builder);
+  g_assert (window);
+
+  populate_tree (builder);
+
+  tv = (GtkTreeView *)gtk_builder_get_object (builder, "treeview1");
+  gtk_tree_view_expand_all (tv);
+
+  gtk_widget_show (window);
+
+  gtk_tree_view_get_cursor (tv, &path, &focus_column);
+  gtk_tree_path_down (path);
+  data.count = 0;
+  data.descendant = NULL;
+  accessible = gtk_widget_get_accessible (GTK_WIDGET (tv));
+  g_signal_connect (accessible, "active_descendant_changed",
+                    G_CALLBACK (active_descendant_changed), &data);
+  gtk_tree_view_set_cursor (tv, path, focus_column, FALSE);
+  /* hack: active_descendant_change gets fired in an idle handler */
+  process_pending_idles ();
+  /* Getting only one signal might be ideal, although we get three or so */
+  g_assert_cmpint (data.count, >=, 1);
+  child = atk_object_ref_accessible_child (data.descendant, 0);
+  text = atk_text_get_text (ATK_TEXT (child), 0, -1);
+  g_assert_cmpstr (text, ==, "aa(1)");
+  g_free (text);
+
+  g_object_unref (child);
+
+  g_object_unref (data.descendant);
+  g_object_unref (builder);
+
+}
+
+static AtkObject *
+find_root_accessible (GtkTreeView *tv, const char *name)
+{
+  AtkObject *tvaccessible = gtk_widget_get_accessible (GTK_WIDGET (tv));
+  int i = 0;
+
+  for (i = 0;;i++)
+  {
+    AtkObject *child = atk_object_ref_accessible_child (tvaccessible, i);
+    AtkObject *item;
+    gchar *text;
+    if (!child)
+      return NULL;
+    item = atk_object_ref_accessible_child (child, 0);
+    if (!item)
+      continue;
+    text = atk_text_get_text (ATK_TEXT (item), 0, -1);
+    g_object_unref (item);
+    if (!g_strcmp0 (text, name))
+    {
+      g_free (text);
+      return child;
+    }
+    g_free (text);
+    g_object_unref (child);
+  }
+}
+
+static void
+test_node_child_of (AtkObject *child, AtkObject *parent)
+{
+  AtkRelationSet *set = atk_object_ref_relation_set (child);
+  AtkRelation *relation = atk_relation_set_get_relation_by_type (set, ATK_RELATION_NODE_CHILD_OF);
+
+  g_assert (relation != NULL);
+  g_assert_cmpint (relation->target->len, ==, 1);
+  g_assert (g_ptr_array_index (relation->target, 0) == parent);
+  g_object_unref (set);
+}
+
+static void
+test_node_parent_of (AtkObject *parent, AtkObject *child)
+{
+  AtkRelationSet *set = atk_object_ref_relation_set (parent);
+  AtkRelation *relation = atk_relation_set_get_relation_by_type (set, ATK_RELATION_NODE_PARENT_OF);
+
+  g_assert (relation != NULL);
+  g_assert_cmpint (relation->target->len, ==, 1);
+  g_assert (g_ptr_array_index (relation->target, 0) == child);
+  g_object_unref (set);
+}
+
+static void
+test_relations (AtkObject *parent, AtkObject *child)
+{
+  test_node_parent_of (parent, child);
+  test_node_child_of (child, parent);
+}
+
+static void
+test_a11y_tree_relations (void)
+{
+  GtkBuilder *builder;
+  GtkWidget *window;
+  GError *error = NULL;
+  GtkTreeView *tv;
+  AtkObject *parent, *child;
+
+  builder = gtk_builder_new ();
+  gtk_builder_add_from_string (builder, tree_ui, -1, &error);
+  g_assert_no_error (error);
+  window = builder_get_toplevel (builder);
+  g_assert (window);
+
+  populate_tree (builder);
+
+  tv = (GtkTreeView *)gtk_builder_get_object (builder, "treeview1");
+  gtk_tree_view_expand_all (tv);
+
+  gtk_widget_show (window);
+
+  parent = find_root_accessible (tv, "a(1)");
+child = find_root_accessible (tv, "aa(1)");
+  test_relations (parent, child);
+  g_object_unref (parent);
+  parent = child;
+child = find_root_accessible (tv, "aaa(1)");
+  test_relations (parent, child);
+  g_object_unref (parent);
+  g_object_unref (child);
+
+  g_object_unref (builder);
+
+}
+
+int
+main (int argc, char *argv[])
+{
+  gtk_test_init (&argc, &argv, NULL);
+
+  g_test_add_func ("/a11y/tree/focus", test_a11y_tree_focus);
+  g_test_add_func ("/a11y/tree/relations", test_a11y_tree_relations);
+
+  return g_test_run ();
+}
+
diff --git a/testsuite/a11y/util.c b/testsuite/a11y/util.c
new file mode 100644 (file)
index 0000000..906c98b
--- /dev/null
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2011 Red Hat Inc.
+ *
+ * Author:
+ *      Matthias Clasen <mclasen@redhat.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <gtk/gtk.h>
+
+static void
+test_toolkit_name (void)
+{
+  const gchar *s;
+
+  s = atk_get_toolkit_name ();
+  g_assert_cmpstr (s, ==, "gtk");
+}
+
+static void
+test_toolkit_version (void)
+{
+  const gchar *s;
+
+  s = atk_get_toolkit_version ();
+  g_assert_cmpstr (s, ==, GTK_VERSION);
+}
+
+static void
+test_root (void)
+{
+  AtkObject *obj;
+
+  obj = atk_get_root ();
+
+  g_assert (atk_object_get_role (obj) == ATK_ROLE_APPLICATION);
+  g_assert (atk_object_get_parent (obj) == NULL);
+}
+
+int
+main (int argc, char *argv[])
+{
+  gtk_test_init (&argc, &argv, NULL);
+
+  g_test_add_func ("/util/toolkit-name", test_toolkit_name);
+  g_test_add_func ("/util/toolkit-version", test_toolkit_version);
+  g_test_add_func ("/util/root", test_root);
+
+  return g_test_run ();
+}
diff --git a/testsuite/a11y/value.c b/testsuite/a11y/value.c
new file mode 100644 (file)
index 0000000..af50a36
--- /dev/null
@@ -0,0 +1,127 @@
+/*
+ * Copyright (C) 2011 Red Hat Inc.
+ * Copyright (C) 2012 SUSE LLC.
+ *
+ * Author:
+ *      Mike Gorse <mgorse@suse.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <gtk/gtk.h>
+#include <string.h>
+
+static void
+set_value (GtkWidget   *widget,
+           gint value)
+{
+  if (GTK_IS_LEVEL_BAR (widget))
+    gtk_level_bar_set_value (GTK_LEVEL_BAR (widget), value);
+  else if (GTK_IS_RANGE (widget))
+    {
+      GtkAdjustment *adjustment = gtk_range_get_adjustment (GTK_RANGE (widget));
+      gtk_adjustment_set_value (adjustment, value);
+    }
+  else if (GTK_IS_SPIN_BUTTON (widget))
+    {
+      GtkAdjustment *adjustment = gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON (widget));
+      gtk_adjustment_set_value (adjustment, value);
+    }
+}
+
+typedef struct
+{
+  gint count;
+  gchar *last_name;
+} NotifyData;
+
+static void
+notify_cb (GObject    *obj,
+           GParamSpec *pspec, NotifyData *data)
+{
+  data->count++;
+  if (data->last_name)
+    g_free (data->last_name);
+  data->last_name = g_strdup (pspec->name);
+}
+
+static void
+test_basic (GtkWidget *widget)
+{
+  NotifyData notify_data;
+  AtkObject *atk_object;
+  AtkValue *atk_value;
+  gdouble value = 50;
+  GValue ret;
+
+  atk_object = gtk_widget_get_accessible (widget);
+  atk_value = ATK_VALUE (atk_object);
+
+  memset (&notify_data, 0, sizeof (notify_data));
+  g_signal_connect (atk_object, "notify", G_CALLBACK (notify_cb), &notify_data);
+  set_value (widget, value);
+  g_assert_cmpint (notify_data.count, ==, 1);
+  g_assert_cmpstr (notify_data.last_name, ==, "accessible-value");
+
+  memset (&ret, 0, sizeof (ret));
+  atk_value_get_current_value (atk_value, &ret);
+  g_assert_cmpfloat (g_value_get_double (&ret), ==, value);
+
+  g_free (notify_data.last_name);
+  g_signal_handlers_disconnect_by_func (atk_object, G_CALLBACK (notify_cb), &notify_data);
+}
+
+static void
+setup_test (GtkWidget *widget)
+{
+  set_value (widget, 0);
+}
+
+static void
+add_value_test (const gchar      *prefix,
+               GTestFixtureFunc  test_func,
+               GtkWidget        *widget)
+{
+  gchar *path;
+
+  path = g_strdup_printf ("%s/%s", prefix, G_OBJECT_TYPE_NAME (widget));
+  g_test_add_vtable (path,
+                     0,
+                     g_object_ref (widget),
+                     (GTestFixtureFunc) setup_test,
+                     (GTestFixtureFunc) test_func,
+                     (GTestFixtureFunc) g_object_unref);
+  g_free (path);
+}
+
+static void
+add_value_tests (GtkWidget *widget)
+{
+  g_object_ref_sink (widget);
+  add_value_test ("/value/basic", (GTestFixtureFunc) test_basic, widget);
+  g_object_unref (widget);
+}
+
+int
+main (int argc, char *argv[])
+{
+  gtk_test_init (&argc, &argv, NULL);
+
+  g_test_bug_base ("http://bugzilla.gnome.org/");
+
+  add_value_tests (gtk_spin_button_new_with_range (0, 100, 1));
+  add_value_tests (gtk_level_bar_new_for_interval (0, 100));
+
+  return g_test_run ();
+}